我们正在尝试制作一个 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)