如何让webpack跳过
require('shelljs/global');
在我的源文件中?我想制作一个我的源文件包,但要将require('shelljs/global')
保留在文件中,而不是捆绑shelljs/global
。
答案 0 :(得分:20)
如果将路径存储在变量中,则IgnorePlugin将无效。虽然你仍然能做到:
const myCustomModule = eval('require')(myCustomPath)
答案 1 :(得分:16)
您可以使用Ignore Plugin (webpack 1) / Ignore plugin (webpack 2)。
在webpack.config.js
中添加插件:
plugins: [
new webpack.IgnorePlugin(/shelljs\/global/),
],
答案 2 :(得分:13)
对于新来者,在webpack 2+上这样做是这样的:
module.exports = {
entry: __dirname + '/src/app',
output: {
path: __dirname + '/dist',
libraryTarget: 'umd'
},
externals: {
'shelljs/globals': 'commonjs shelljs/global'
}
};
该包将包含逐字要求:
require('shelljs/global');
阅读更多支持的格式on webpack's config guide和一些好的示例here
答案 3 :(得分:2)
如果require
在全局命名空间中,这就是你希望Webpack忽略它的原因,那就做window.require()
答案 4 :(得分:1)
这是个把戏
const require = module[`require`].bind(module);
请注意模板字符串的使用
答案 5 :(得分:1)
这应该是最后的选择,但是如果您确定JS文件始终是由Webpack解析的,则别无其他选择:
您可以将require()
的呼叫替换为__non_webpack_require__()
Webpack将解析并转换任何这种情况,并输出正常的require()
调用。仅当您在NodeJS中执行或在浏览器中执行(如果有可触发的全局需求库)时,此方法才起作用。
如果webpack无法解析文件,并且脚本由其他程序运行,则您的代码将尝试调用未转换的__non_webpack_require__
,这将失败。如果__non_webpack_require__
作为函数存在,并且如果不存在,则可能会编写一些代码来检查脚本中的代码,否则,将其传递给要求。
但是,这应该是临时的,只是为了避免构建错误,直到可以用Webpack自己的动态导入之类的东西替换它为止。