如何让webpack完全忽略特定的require语句

时间:2016-06-30 17:44:39

标签: webpack commonjs

我正在编写一个导出类似函数的库:

function getFreshModule(absolutePath) {
  if (someCond) {
    delete require.cache[absolutePath]
  }
  return require(absolutePath)
}

使用webpack与libraryTarget: 'commonjs'target: 'node'一起编译此(babel)。

对于我的生活,我无法弄清楚如何让webpack忽略这一点。

我不相信externals对此是正确的,我还检查了ContextReplacementPlugin,以及摆弄这些选项(来自文档的片段)。

{
  module: {
    // Disable handling of requires with a single expression
    exprContextRegExp: /$^/,
    exprContextCritical: false
  }
}

然而,这似乎并没有像它所说的那样 - 因为我的require语句仍然被__webpack_require_函数取代。我也试过了module.noParse,但这并不起作用,因为它不会通过babel转换。

库的其余部分是正常的,我只是希望它专门忽略require的这种用法。

2 个答案:

答案 0 :(得分:1)

我放弃了试图弄清楚如何做到这一点。 所以我推出了一个新的npm模块'external-require',简单地说就是:

module.exports = (x) => { return require(x)}

在webpack配置中使用'externals'支持,除此之外,我现在可以做我想做的事。

有一天,我会找到正确的方法。

如果您希望我扩展它支持更多需要的东西,请告诉我,例如删除require.cache []

答案 1 :(得分:0)

派对迟到了,但我遇到了类似的问题并且与Webpack争吵了一段时间没有用。但是,如果您可以使require成为命名空间的一部分,那么您可以执行app.require()之类的操作,Webpack将忽略它。幸运的是,我需要Window全球可用。

相关问题