如何让webpack跳过出现
require('shelljs/global');
Run Code Online (Sandbox Code Playgroud)
在我的源文件中?我想制作一个我的源文件包但保留require('shelljs/global')在文件而不是捆绑shelljs/global.
Jam*_*wuh 22
如果将路径存储在变量中,则IgnorePlugin将不起作用.虽然你还可以这样做:
const myCustomModule = eval('require')(myCustomPath)
Run Code Online (Sandbox Code Playgroud)
Dmi*_*nko 16
您可以使用Ignore Plugin(webpack 1)/Ignore插件(webpack 2).
添加插件webpack.config.js:
plugins: [
new webpack.IgnorePlugin(/shelljs\/global/),
],
Run Code Online (Sandbox Code Playgroud)
MrB*_*Bar 14
对于新来者,在webpack 2+上这样做是这样的:
module.exports = {
entry: __dirname + '/src/app',
output: {
path: __dirname + '/dist',
libraryTarget: 'umd'
},
externals: {
'shelljs/globals': 'commonjs shelljs/global'
}
};
Run Code Online (Sandbox Code Playgroud)
该捆绑包将包含逐字要求:
require('shelljs/global');
Run Code Online (Sandbox Code Playgroud)
在webpack的配置指南中阅读更多支持的格式,这里有一些很好的例子
这应该是最后的选择,但如果你确定你的 JS 文件总是被 Webpack 解析,没有别的:
你可以require()用__non_webpack_require__()
Webpack 将解析并转换任何出现的 this 并输出正常require()调用。这仅在您在 NodeJS 中执行或在浏览器中执行时才有效,如果您有一个可用于触发的全局需求库。
如果 webpack 不解析文件,并且脚本由其他东西运行,那么您的代码将尝试调用未转换的__non_webpack_require__,这将失败。您可能会编写一些代码,在脚本中更早地检查是否__non_webpack_require__作为函数存在,如果不存在,则让它将调用传递给 require。
但是,这应该是暂时的,并且只是为了避免构建错误,直到您可以将其替换为 Webpack 自己的动态导入之类的东西。