Webpack ContextReplacementPlugin 从node_modules获取包

ome*_*rts 5 node.js webpack

我们正在尝试制作一个 webpack 捆绑包,它将在单个捆绑包中包含我们的所有依赖项。

有一个特定的包,它有来自node_modules的动态需求,而webpack无法在编译时正确解析该包。

生成错误的代码是:

// config.middlewares is a list of packages inside node_modules
Object.keys(config.middlewares).forEach(function (moduleName) {
  var pkg = require(moduleName)
  var alias = config.middlewares[moduleName]
  helmet[alias] = pkg
})
Run Code Online (Sandbox Code Playgroud)

Webpack 将其编译为:

Object.keys(config.middlewares).forEach(function (moduleName) {
  var pkg = !(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())
  var alias = config.middlewares[moduleName]
  helmet[alias] = pkg
})
Run Code Online (Sandbox Code Playgroud)

因此,我们尝试使用 Webpack 的 ContextReplacementPlugin,但无论我们尝试什么,我们都无法将其配置为更改上下文以从 node_modules 获取文件。

我们尝试过的一些事情(我们首先尝试获取一个特定的包,称为 hsts):

new ContextReplacementPlugin(/helmet.*/, /\.\.\/hsts/)
new ContextReplacementPlugin(/helmet.*/, /\.\/\.\.\/hsts/)
new ContextReplacementPlugin(/helmet.*/, /\.\/\.\.\/hsts\/index\.js/)
```
Run Code Online (Sandbox Code Playgroud)