2017-04-12 77 views
1

我们正在提升一个巨大的代码库的部分过程。我们正在引入一个使用webpack构建的模块。为了避免代码重复,我们使用了webpack的外部选项。混合browserify和webpack外部

当我们开始将我们的模块集成到当前正在使用browserify的主代码库中时,我们遇到了一个问题,即共享依赖包含两次并导致问题。

有没有办法让webpack使用打包版本的依赖关系?那么在最终的browserified bundle中,我们只需要包含一个依赖项?

在我看来,这可能是不可能的,如果是这样的话,我会推动我们的代码库的其余部分移到webpack上(它已经在进行中)。

我到目前为止唯一的解决方案是让webpack模块也导出共享依赖项,然后让主应用程序使用该导出,但这并不理想。

我已确保两个node_modules文件夹中的依赖项都在相同的版本,并且我仍然得到2个实例。

我需要能够告诉Browserify只解析我的应用程序node_modules,或告诉它从上到下解析,即首先查看顶层node_modules,这可能吗?

我曾尝试设置NODE_PATH选项,当使用CLI到没有影响。

**更新**

所以,问题是,当Browserify命中require()语句中的WebPack捆绑它从本地文件夹node_modules解决,所以我们最终依赖的两个实例。我可以通过在应用程序require()或webpacks external选项中使用相对路径并确保它们使用相同的文件来解决此问题。

回答

0

所以这似乎是问题是由于我已经符合链接(与npm链接),模块,因为我也在这个工作。看起来,当Browserify解析symlinked模块中的require时,它解析为它自己的node_modules,并且我们最终得到2个副本。

当我通常安装模块时,它一切正常,所以这是好的,因为模块的其他使用者应该没有问题。令人讨厌的是,它的行为如此,但我只需要确保在模块旁边开发时,我在主应用程序中指向相同的依赖关系。

所以我需要在主应用程序说明(而符号链接)看起来是这样的:

require('./node_modules/my-module/node_modules/shared-dependency/index.js'); 

我需要正常不符号链接时。