解决node_modules路径,使用webpack跨多个兄弟项目启动文件夹

时间:2016-03-04 15:39:01

标签: node.js path webpack

我有几个兄弟文件夹/回购:

| - 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之前解析为Bnode_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?

2 个答案:

答案 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取代,从而防止重复。