我有几个兄弟文件夹/回购:
| - A
| |- node_modules
| |- app
|
| - B
| |- node_modules
| |- app
|
| - C
| |- node_modules
| |- app
由于存在交叉依赖关系,因此A
可能需要B
中的脚本。
// A/app/script.js
var bDependency = require('B/app/script.js')
// B/app/script.js
var jquery = require('jquery')
在这个例子中,当webpack去捆绑它时,它会在jquery
之前解析为B
到node_modules
的{{1}}。这也导致webpack bundle.js中的重复模块,因为它可以解析为其他兄弟node_modules文件夹。 (即使在A
)
所以我必须new webpack.optimize.DedupePlugin()
npm install
中的B
包,即使它是A
需要它并且已经安装了库。
我正在使用resolve,root和modulesDirectories webpack选项进行一些友好的路径解析。
我想要做的是首先解析启动文件夹的所有node_modules路径。有没有办法通过webpack的路径解析工具实现这一点,还是应该重新构建应用程序以共享一个node_modules?
答案 0 :(得分:1)
我发现最优雅的解决方案是在webpack.config中为指向启动文件夹的fallback
目录的resolve
对象定义node_modules
属性。的.js
resolve: {
// Check the initiating folder's node_modules
fallback: [
path.join(__dirname, "node_modules")
]
}
您可以在此处详细了解:https://webpack.github.io/docs/configuration.html#resolve-fallback
答案 1 :(得分:0)
这可以通过Webpack的NormalModuleReplacementPlugin:
来解决projectB/node_modules
与上述正则表达式匹配的任何导入文件都会通过该函数修改其路径,从而导致projectA/node_modules
中的模块被Automapper
取代,从而防止重复。