如何使webpack跳过要求

Tho*_*sen 18 node.js webpack

如何让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)

  • 警告:应避免 eval。仅在您了解并了解风险的情况下才使用它。否则,寻找其他解决方案。在 Google 上阅读或在此处了解更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval (2认同)

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的配置指南中阅读更多支持的格式,这里有一些很好的例子


Dan*_*anV 5

如果require在全局命名空间中,这就是您希望 Webpack 忽略它的原因,只需执行window.require()


red*_*x05 5

这应该是最后的选择,但如果你确定你的 JS 文件总是被 Webpack 解析,没有别的:

你可以require()__non_webpack_require__()

Webpack 将解析并转换任何出现的 this 并输出正常require()调用。这仅在您在 NodeJS 中执行或在浏览器中执行时才有效,如果您有一个可用于触发的全局需求库。

如果 webpack 不解析文件,并且脚本由其他东西运行,那么您的代码将尝试调用未转换的__non_webpack_require__,这将失败。您可能会编写一些代码,在脚本中更早地检查是否__non_webpack_require__作为函数存在,如果不存在,则让它将调用传递给 require。

但是,这应该是暂时的,并且只是为了避免构建错误,直到您可以将其替换为 Webpack 自己的动态导入之类的东西。