JavaScript文件引入、CommonJs和Es Module


JavaScript文件引入

  早期通過script標簽引入js文件,但當項目越來越龐大時,隨着引入js文件的增加,會出現以下問題:

  • js文件作用域都是頂層,將造成變量污染
  • js文件變多,項目變得不好維護
  • js文件依賴問題,引入順序錯,代碼全報錯

 

為了解決上述問題,出現了CommonJs和Es Module

  • 解決變量污染問題,每一個文件都是獨立的作用域,所以不存在變量污染
  • 解決代碼維護問題,一個文件里代碼非常清晰
  • 解決文件依賴問題,一個文件里可以清楚看到依賴了那些其他文件

CommonJs

  CommonJs使用module.exports導出變量及函數,可以導出任意類型的值;也可省略module關鍵字,直接寫exports導出。支持混合導出。

  CommonJs使用require導入,如果想要單個的值,可以通過解構對象來獲取

// commonjs.js
module.exports = {
    name: 'ame',
    age: 24,
    sex: 'male'
}

exports.name = 'maybe'

// getdata.js
let {name, age, sex} = require('./commonjs.js')
console.log(name);

  不管是CommonJs還是Es Module都不會重復導入,即只要該文件內加載過一次這個文件了,再次導入一次是不會生效的

  CommonJs支持動態導入,即只有執行到require時才執行文件導入

  CommonJs導入的是值的拷貝,所以可以修改拷貝值,但這樣可能會引起變量污染

 

Es Module

  Es Module導出分為兩種:單個導出(export)和默認導出(export default),支持混合導出,如果文件中有混合導入,則必須先導入默認導出的,再導入單個導入的值

  Es Module使用import進行導入,如果要單個導入則必須使用{}

  export導出的是值的引用,並且內部有映射關系,而且導入的值不能進行修改即為只讀狀態

  Es Module的import只能聲明在文件的最頂部,不能動態加載語句

  

export const name = "ame"
export const age = 24

export default {
    fn() {},
}

import { name, age } from './index.js'
console.log(name, age) // "ame" 24

// 如果里面全是單個導出,我們就想全部直接導入則可以這樣寫
import * as all from './index.js'
console.log(all) // {name: "ame", age: 24}

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM