混合 browserify 和 webpack 外部

Mixing browserify and webpack externals

我们正在提升庞大代码库的一部分。我们引入了一个使用 webpack 构建的模块。为了避免代码重复,我们使用了 webpacks externals 选项。

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

有没有办法让webpack使用打包后的依赖版本?所以在最终的浏览器化包中我们只包含一次依赖项?

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

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

我已确保两个 node_modules 文件夹中的依赖项处于同一版本,但我仍然得到 2 个实例。

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

我试过在使用 cli 时设置 NODE_PATH 选项不受影响。

** 更新 **

所以问题是,当 Browserify 在 webpack 包中命中 require() 语句时,它从本地 node_modules 文件夹解析,所以我们最终得到 2 个依赖实例。我可以通过在应用程序 require() 或 webpacks 外部选项中使用相对路径并确保它们使用相同的文件来解决这个问题。

所以问题似乎是由于我使用了 symlinked(使用 npm link),我也在处理这个模块。似乎当 Browserify 解析 symlinked 模块中的需求时,它解析为它自己的 node_modules,我们最终得到 2 个副本。

当我正常安装模块时,一切正常,所以这没关系,因为模块的其他消费者应该没有问题。它的这种行为很烦人,但我只需要确保在与模块一起开发时在我的主应用程序中指向相同的依赖项。

所以我在主应用程序中的 require 语句(当 symlinking 时)看起来像这样:

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

我可以在不symlinking 时照常要求。