We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
webpack里面的output其中有2个属性, 分别是libraryTarget和library, 是用来打包一个库的时候工作的.
output
libraryTarget
library
library是导出的库的变量名,而libraryTarget则是导出的变量是赋值到哪一个变量上的, 比如this, global, window,exports等等.
这章主要解决2个问题?
下面会用一个demo的打包情况, 来看看webpack这2个属性的打包结果. 下面是一些基本的配置.
let baseConfig = { entry: { index: './index.js' }, output: { filename: '[name].[chunkhash].js', publicPath: '/', chunkFilename: '[name].[chunkhash].js', library: 'myLib' } };
let a = 1; exports.a = a;
以下所有的情况,默认的library:'myLib'
var
默认当前情况下, 打包的入口返回的值, 是var. 以下是打包出来的文件(去掉了其他的内容), 简要的结构.
var myLib = (function(modules) { function __webpack_require__(moduleId) { return module.exports; } ... 其他的打包相关内容 return __webpack_require__((__webpack_require__.s = 0)); })([ function(module, exports) { let a = 1; exports.a = a; } ]);
这个可以和其他libraryTarget的值类比, 从入口的index.js进入开始打包, 入口的文件index.js的导出的模块, 就是__webpack_require__函数的返回值. 然后把整个入口函数导出的内容, 赋值给变量myLib, 也就是library的值, 这是libraryTarget需要配合library使用的原因.
index.js
__webpack_require__
amd
打包amd兼容的模块
umd
commonjs
commonjs2
assign
libraryTarget: 'assign' - 这将产生一个隐含的全局变量,可能会潜在地重新分配到全局中已存在的值(谨慎使用)。
global
jsonp
this
window
如果library的值是缺省的
如果library属性的值是在libraryTarget:amd的匿名模块, 此时加载符合amd模块标准, 加载匿名模块需要用该文件名称进行加载.
define(function() { return /******/ (function(modules) { ... }
this | global | window | commonjs
以上几种的情况可以何在一起讲, 因为this | global | window | commonjs都是指向一个对象, 这种情况, index.js返回的内容也是挂载在一个对象上, 所以会进行遍历这个对象上的属性, 并赋值到this | global | window | commonjs的对象上.
commonjs2和commonjs的模块打包是有区别的, nodeJs用的是拓展了commonJs的commonjs2, 和commonJs不同, 增加了module.export, __filename, __dirname等等内置的变量
而libraryTarget: commonjs2在library缺省的时候, 打包并没有什么不同, 因为module.exports = xxx 并不需要library的值. 所以这个时候library值缺省也是可以的.
libraryTarget: commonjs2
module.exports = xxx
这个值在library缺省的情况下, 打包出来的结果运行会出错,因为assign的定义是, 打包出来的结果是赋值给一个全局变量.
var | jsonp
这2个模块在library缺省的情况, 不工作的, 因为无论是var, 还是jsonp的情况下都是需要一个名称, 所以这里的结果和libraryTarget和library都缺省的情况是一样的.
var 是需要把index.js的入口文件定义成library的变量名 jsonp是需要一个函数名, 而library就是这个函数的名, 函数的参数就是index.js返回的内容.
这里总结了一下webpack里面的属性library, 和libraryTarget打包的各种情况, 但是如果打包一个库来说, rollup才是最棒的工具,trust me~~~.
rollup
The text was updated successfully, but these errors were encountered:
No branches or pull requests
前言
webpack里面的
output
其中有2个属性, 分别是libraryTarget
和library
, 是用来打包一个库的时候工作的.library
是导出的库的变量名,而libraryTarget
则是导出的变量是赋值到哪一个变量上的, 比如this, global, window,exports等等.这章主要解决2个问题?
下面会用一个demo的打包情况, 来看看webpack这2个属性的打包结果. 下面是一些基本的配置.
默认的webpack.config.js的配置.
index.js的入口实例代码
libraryTarget的值有哪些?
libraryTarget:
var
(默认值)默认当前情况下, 打包的入口返回的值, 是
var
.以下是打包出来的文件(去掉了其他的内容), 简要的结构.
这个可以和其他
libraryTarget
的值类比, 从入口的index.js
进入开始打包, 入口的文件index.js
的导出的模块, 就是__webpack_require__
函数的返回值.然后把整个入口函数导出的内容, 赋值给变量myLib, 也就是
library
的值, 这是libraryTarget
需要配合library
使用的原因.libraryTarget:
amd
打包
amd
兼容的模块libraryTarget:
umd
libraryTarget:
commonjs
libraryTarget:
commonjs2
libraryTarget:
assign
libraryTarget:
global
libraryTarget:
jsonp
libraryTarget:
this
libraryTarget:
window
library的缺省值怎么影响打包结果
libraryTarget:amd 定义将匿名模块
如果
library
属性的值是在libraryTarget:amd的匿名模块, 此时加载符合amd模块标准, 加载匿名模块需要用该文件名称进行加载.libraryTarget:
this | global | window | commonjs
以上几种的情况可以何在一起讲, 因为

this | global | window | commonjs
都是指向一个对象, 这种情况,index.js
返回的内容也是挂载在一个对象上, 所以会进行遍历这个对象上的属性, 并赋值到this | global | window | commonjs
的对象上.libraryTarget:
commonjs2
commonjs2和commonjs的模块打包是有区别的, nodeJs用的是拓展了commonJs的commonjs2, 和commonJs不同, 增加了module.export, __filename, __dirname等等内置的变量
而
libraryTarget: commonjs2
在library
缺省的时候, 打包并没有什么不同, 因为module.exports = xxx
并不需要library
的值. 所以这个时候library
值缺省也是可以的.libraryTarget:
assign
这个值在
library
缺省的情况下, 打包出来的结果运行会出错,因为assign的定义是, 打包出来的结果是赋值给一个全局变量.libraryTarget:
var | jsonp
这2个模块在
library
缺省的情况, 不工作的, 因为无论是var, 还是jsonp的情况下都是需要一个名称, 所以这里的结果和libraryTarget
和library
都缺省的情况是一样的.var
是需要把index.js的入口文件定义成library
的变量名jsonp
是需要一个函数名, 而library
就是这个函数的名, 函数的参数就是index.js
返回的内容.总结
这里总结了一下webpack里面的属性
library
, 和libraryTarget
打包的各种情况, 但是如果打包一个库来说,rollup
才是最棒的工具,trust me~~~.The text was updated successfully, but these errors were encountered: