【问题标题】:Mixing browserify and webpack externals混合 browserify 和 webpack 外部
【发布时间】:2017-04-12 16:01:36
【问题描述】:

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

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

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

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

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

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

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

我尝试在使用 cli 时将 NODE_PATH 选项设置为无效。

** 更新**

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

【问题讨论】:

    标签: javascript webpack browserify


    【解决方案1】:

    所以问题似乎是由于我已经符号链接(使用 npm 链接),我也在处理这个模块。似乎当 Browserify 解析符号链接模块中的 require 时,它​​解析为它自己的 node_modules,我们最终得到了 2 个副本。

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

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

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

    不进行符号链接时,我可以正常要求。

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 2014-04-27
      • 2017-06-20
      • 2017-10-28
      • 2011-05-07
      • 1970-01-01
      相关资源
      最近更新 更多