[Webpack] 打包生成的文件模塊類型

1. 最終js文件

webpack+babel可以將多個(gè)ES6 module打包成一個(gè)js文件。
默認(rèn)情況下,這個(gè)js文件的功能是向一個(gè)名為Library的變量賦值。

var Library = xxx;

我們可以通過配置webpack,讓最終的js文件具有不同的表現(xiàn)形式。

2. output.libraryTarget

它可以有以下幾種取值:(默認(rèn)值為var
(1)var,對(duì)一個(gè)變量賦值var Library = xxx
(2)this,設(shè)置thisLibrary屬性,var Library = xxx
(3)commonjs,設(shè)置exportsLibrary屬性,exports["Library"] = xxx
(4)commonjs2,設(shè)置module.exports = xxx
(5)amd,導(dǎo)出為AMD格式
(6)umd,導(dǎo)出為AMD,CommonJS2,以及全局對(duì)象的一個(gè)屬性(后面進(jìn)行解釋

3. umd示例

3.1 配置

我們先配置webpack.config.js文件中的libraryTargetumd

...

module.exports = {
    ...
    output: {
        ...
        libraryTarget: 'umd'
    },
    ...
};

3.2 導(dǎo)出

webpack必須指定編譯的入口文件,
從這個(gè)文件開始,把它所依賴的模塊編譯打包成一個(gè)最終文件,
一般在webpack.config.js文件中,配置entry即可。

假設(shè)入口文件為index.js,打包后的最終文件為target.js
我們需要在入口文件中,一般要將對(duì)象通過默認(rèn)和非默認(rèn)的方式各導(dǎo)出一次。

// index.js
const v = 1;

export default v;    // 保證默認(rèn)導(dǎo)入“import v”可用
export { v };     // 保證“window.v”可用

3.3 使用方式

(1)ES5中直接使用target.js
假如用戶想直接在瀏覽器中使用該模塊,
它可以通過<script src="target.js"></script>加載js,
然后在隨后的<script>文件中,使用window對(duì)象獲取target.js導(dǎo)出的內(nèi)容。

// export { v }; 保證ES5可以從全局對(duì)象的屬性中獲取v
var v = window.v;

(2)ES6中引用target.js
假如用戶開發(fā)環(huán)境有一套webpack+babel體系,
可以編譯自己的入口文件以及相關(guān)的依賴,
那么就可以直接import這個(gè)target.js文件。

// export default v; 保證ES6可以默認(rèn)導(dǎo)入v
import v from 'target.js';

// 當(dāng)然非默認(rèn)導(dǎo)出也是可用的
// import { v } from 'target.js'; 

(3)CommonJS方式

var result = require('target.js');
// result === { default: 1, v: 1 };

注意這里,
require('target.js')的結(jié)果并不是v,而是一個(gè){ default: 1, v: 1 }對(duì)象。

(4)AMD方式(略


參考

webpack - libraryTarget
AMD
CommonJS

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容