【问题标题】:How to have webpack completely ignore specific require statement如何让 webpack 完全忽略特定的 require 语句
【发布时间】:2016-06-30 17:44:39
【问题描述】:

我正在编写一个像这样导出函数的库:

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

使用 webpack 编译这个 (babel) 以及 libraryTarget: 'commonjs'target: 'node'

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

我认为externals 不适合这个,我还检查了 ContextReplacementPlugin,以及摆弄这些选项(来自文档的 sn-p)。

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

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

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

【问题讨论】:

  • 这很疯狂,有同样的问题。找不到任何方法。
  • 晚会,但在尝试解决同样的问题时,我发现了__non_webpack_require__,这是对 webpack 运行时原始 require 函数的引用。

标签: webpack commonjs


【解决方案1】:

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

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

通过 webpack 配置中的“外部”支持(不包括这个),我现在可以做我想做的事了。

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

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

【讨论】:

    【解决方案2】:

    聚会有点晚了,但我遇到了类似的问题,并与 Webpack 斗争了一段时间,但无济于事。然而,如果你可以让require 成为命名空间的一部分,那么你可以做类似app.require() 的事情,Webpack 会忽略它。对我来说幸运的是,require 在Window 上全球可用。

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 2011-10-19
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 2011-06-29
      • 2016-06-04
      • 2015-11-06
      • 1970-01-01
      相关资源
      最近更新 更多