webpack的模块打包
程序员文章站
2022-05-30 18:16:29
...
webpack以模块方式导出的配置
module.exports = {
entry: 'XX',
mode: 'development',
devtool: 'cheap-module',
output: {
filename: 'XX',
path: 'XXX',
library: 'MyLibrary',
libraryTarget: 'umd',
}
}
模块打包主要依赖于output配置的librayTarget,它决定模块导出的类型,类型主要有三大类:
(下面例子中的_entry_return代表模块的导出)
作为变量导出
libraryTarget: 'var'
library: 'MyLibrary'
// 最后生成代码大概就是
var MyLibrary = _entry_return
作为对象导出
libraryTarget: "window"
library: 'MyLibrary'
window['MyLibrary'] = _entry_return_;
作为模块导出
经典的cmd、amd、umd 这3中导出方式,虽然esm的模块方案已成为主流,但是浏览器跑不了。
cmd
libraryTarget: 'commonjs2'
library: 'MyLibrary' // 会被忽略
module.exports = _entry_return_;
amd
libraryTarget: 'amd',
library: 'MyLibrary',
define('MyLibrary', [], function() {
return _entry_return;
})
umd
libraryTarget: 'umd'
library: 'MyLibrary'
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports['MyLibrary'] = factory();
else
root['MyLibrary'] = factory();
})(typeof self !== 'undefined' ? self : this, function() {
return _entry_return_;
});