我们正在提升庞大代码库的一部分。我们引入了一个用webpack构建的模块。为了避免代码重复,我们使用了webpacks externals选项。
当我们开始将我们的模块集成到当前使用browserify的主代码库时,我们遇到了一个问题,即共享依赖项被包含两次并导致问题。
是否有办法让webpack使用依赖的打包版本?所以在最终的浏览器化软件包中,我们只包含一次依赖项?
在我看来,这可能是不可能的,如果是这样,我会推动将其余的代码库移到webpack上(它已经在进行中)。
到目前为止,我提出的唯一解决方案是让webpack模块也导出共享依赖项,然后让主应用程序使用该导出,但这并不理想。
我确保两个node_modules文件夹中的依赖项都是同一个版本,我仍然得到2个实例。
我需要告诉Browserify只解析我的应用node_modules,或告诉它从上到下解析,即先查看顶层node_modules,这可能吗?
在使用cli时没有影响我尝试设置NODE_PATH选项。
**更新**
所以问题是,当Browserify命中webpack包中的require()语句时,它会从本地node_modules文件夹中解析出来,因此我们最终会得到2个依赖项实例。我可以通过在apps require()或webpacks external选项中使用相对路径并确保它们使用相同的文件来解决此问题。
答案 0 :(得分:0)
所以看起来这个问题是由于我已经使用符号链接(使用npm链接)这个模块,因为我正在研究这个模块。似乎当Browserify解析符号链接模块中的require时,它会解析为自己的node_modules,最后我们会得到2个副本。
当我正常安装模块时,一切正常,所以这没关系,因为模块的其他消费者应该没有问题。令人讨厌的是它的行为方式如此,但我只需要确保在与模块一起开发时,我指向主应用程序中的相同依赖项。
所以我在主应用程序中的require语句(同时符号链接)看起来像这样:
require('./node_modules/my-module/node_modules/shared-dependency/index.js');
我可以在不进行符号链接时正常使用。