如何使webpack跳过要求

时间:2016-01-16 15:30:52

标签: node.js webpack

如何让webpack跳过

require('shelljs/global');

在我的源文件中?我想制作一个我的源文件包,但要将require('shelljs/global')保留在文件中,而不是捆绑shelljs/global

6 个答案:

答案 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自己的动态导入之类的东西替换它为止。