Webpack 4 通用库目标
Webpack 4 universal library target
根据 Webpack 4 documentation,如果我指定 libraryTarget: 'umd' 它应该导致以下输出:
(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_;
});
然而,我得到的是:
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define("lib", [], factory);
else if(typeof exports === 'object')
exports["lib"] = factory();
else
root["lib"] = factory();
})(window, function() {
return
更准确的说,不是这个
(typeof self !== 'undefined' ? self : this, function()
我明白了:
(window, function()
这(显然)会导致在节点环境中导入时出现运行时错误 window is undefined
。
要明确:
我知道 window
在节点应用程序中不存在。我的问题不是关于这个,而是关于 webpack.
这是一个错误还是我遗漏了什么?
我的输出配置:
output: {
path: resolve(__dirname, 'umd'),
filename: 'lib.js',
libraryTarget: 'umd',
library: 'lib',
umdNamedDefine: true,
},
这将是 Webpack 4 中的 bug。
Webpack 3 生成合适的包。
此问题应使用 this 功能修复,直到完成建议的解决方法是使用 globalObject
:
output: {
path: resolve(__dirname, 'umd'),
filename: 'lib.js',
libraryTarget: 'umd',
library: 'lib',
umdNamedDefine: true,
globalObject: `(typeof self !== 'undefined' ? self : this)`
},
根据docs包含output.globalObject
到webpack.config.js:
module.exports = {
output: {
libraryTarget: 'umd',
globalObject: 'this'
}
}
要使 UMD 构建在浏览器和 Node.js 上都可用,请将 output.globalObject 选项设置为 'this'。
根据 Webpack 4 documentation,如果我指定 libraryTarget: 'umd' 它应该导致以下输出:
(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_;
});
然而,我得到的是:
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define("lib", [], factory);
else if(typeof exports === 'object')
exports["lib"] = factory();
else
root["lib"] = factory();
})(window, function() {
return
更准确的说,不是这个
(typeof self !== 'undefined' ? self : this, function()
我明白了:
(window, function()
这(显然)会导致在节点环境中导入时出现运行时错误 window is undefined
。
要明确:
我知道 window
在节点应用程序中不存在。我的问题不是关于这个,而是关于 webpack.
这是一个错误还是我遗漏了什么?
我的输出配置:
output: {
path: resolve(__dirname, 'umd'),
filename: 'lib.js',
libraryTarget: 'umd',
library: 'lib',
umdNamedDefine: true,
},
这将是 Webpack 4 中的 bug。
Webpack 3 生成合适的包。
此问题应使用 this 功能修复,直到完成建议的解决方法是使用 globalObject
:
output: {
path: resolve(__dirname, 'umd'),
filename: 'lib.js',
libraryTarget: 'umd',
library: 'lib',
umdNamedDefine: true,
globalObject: `(typeof self !== 'undefined' ? self : this)`
},
根据docs包含output.globalObject
到webpack.config.js:
module.exports = {
output: {
libraryTarget: 'umd',
globalObject: 'this'
}
}
要使 UMD 构建在浏览器和 Node.js 上都可用,请将 output.globalObject 选项设置为 'this'。