1. 最終js文件
webpack+babel可以將多個ES6 module打包成一個js文件预茄。
默認情況下,這個js文件的功能是向一個名為Library
的變量賦值骑丸。
var Library = xxx;
我們可以通過配置webpack庸娱,讓最終的js文件具有不同的表現(xiàn)形式啃炸。
2. output.libraryTarget
它可以有以下幾種取值:(默認值為var
(1)var
赃额,對一個變量賦值var Library = xxx
(2)this
加派,設(shè)置this
的Library
屬性,var Library = xxx
(3)commonjs
跳芳,設(shè)置exports
的Library
屬性芍锦,exports["Library"] = xxx
(4)commonjs2
,設(shè)置module.exports = xxx
(5)amd
筛严,導(dǎo)出為AMD格式
(6)umd
醉旦,導(dǎo)出為AMD,CommonJS2桨啃,以及全局對象的一個屬性(后面進行解釋
3. umd示例
3.1 配置
我們先配置webpack.config.js
文件中的libraryTarget
為umd
,
...
module.exports = {
...
output: {
...
libraryTarget: 'umd'
},
...
};
3.2 導(dǎo)出
webpack必須指定編譯的入口文件檬输,
從這個文件開始照瘾,把它所依賴的模塊編譯打包成一個最終文件,
一般在webpack.config.js
文件中丧慈,配置entry
即可析命。
假設(shè)入口文件為index.js
,打包后的最終文件為target.js
逃默,
我們需要在入口文件中鹃愤,一般要將對象通過默認和非默認的方式各導(dǎo)出一次。
// index.js
const v = 1;
export default v; // 保證默認導(dǎo)入“import v”可用
export { v }; // 保證“window.v”可用
3.3 使用方式
(1)ES5中直接使用target.js
假如用戶想直接在瀏覽器中使用該模塊完域,
它可以通過<script src="target.js"></script>
加載js软吐,
然后在隨后的<script>
文件中,使用window
對象獲取target.js
導(dǎo)出的內(nèi)容吟税。
// export { v }; 保證ES5可以從全局對象的屬性中獲取v
var v = window.v;
(2)ES6中引用target.js
假如用戶開發(fā)環(huán)境有一套webpack+babel體系凹耙,
可以編譯自己的入口文件以及相關(guān)的依賴,
那么就可以直接import
這個target.js
文件肠仪。
// export default v; 保證ES6可以默認導(dǎo)入v
import v from 'target.js';
// 當(dāng)然非默認導(dǎo)出也是可用的
// import { v } from 'target.js';
(3)CommonJS方式
var result = require('target.js');
// result === { default: 1, v: 1 };
注意這里肖抱,
require('target.js')
的結(jié)果并不是v
,而是一個{ default: 1, v: 1 }
對象异旧。
(4)AMD方式(略