【问题标题】:Is it okay to link node modules files in webpack.config.js?可以在 webpack.config.js 中链接节点模块文件吗?
【发布时间】:2019-07-31 11:49:09
【问题描述】:

在一些项目中,我看到开发人员没有链接到 webpack.config.js 中的 node_modules 文件(例如“./node_modules/boostrap/dist/js/boostrap.bundle.js”),而是复制了文件到 assets/js 并将其链接到那里。我的一些朋友还告诉我,他们更喜欢这个选项,因为他们从不觉得链接到 node_modules 很安全(我想有人可能会使用npm update...?)

您认为什么是“良好做法”?链接到 node_modules 完全没问题吗?如果不是 - 会发生什么错误?

我在小型项目中使用了这种方法,因为我认为不需要将文件翻倍,但在更大的项目中 - 为了安心 - 我使用了资产路径

【问题讨论】:

  • npm update 不会改变任何东西,如果你固定依赖项(你真的应该这样做)

标签: javascript node.js dependencies dependency-management


【解决方案1】:

这样做是可以的。纯粹从构建步骤的角度来看,它没有任何区别。

您在使用节点模块作为 npm 提供它们 (node_modules) 和在 assetsvendors 文件夹中存储您自己的副本之间做出的权衡是:

  1. 安全
  2. 源代码管理和开发效率
  3. 存储空间

当世界各地成千上万的开发人员创建小型项目并将它们推送到 Github 时,让所有人都存储自己的 JQuery 副本然后将其推送到他们的 Github 存储库中是没有意义的。相反,我们推送一个将其列为依赖项的 package.json 文件,我们为每个第三方依赖项执行此操作,并防止创建一个存储库,其中很多(甚至大部分)代码不是应用程序代码,而是依赖项。这很好。

另一方面,如果开发人员每次启动/克隆/分叉新项目时总是下载依赖项,那么每次下载模块时,您都可能面临安装受损软件包版本的风险。为此,我们使用漏洞扫描器、语义版本控制和锁定文件 (package-lock.json) 来解决此问题,让您可以控制获取更新的方式和时间。

下载的另一个问题总是它消耗的带宽。为此,我们使用本地缓存来解决。因此,即使您从一个项目中卸载了一个模块,npm 也不会真正从您的驱动器中删除它。它在缓存文件夹中保留一份副本。这对大多数开发人员来说确实很有效,但在拥有大量应用程序的企业环境中却不是那么好。

一个已经严重影响世界的问题是,如果模块作者决定删除代码,那么许多应用程序将停止工作,因为他们无法再找到依赖项。见left-pad broke Node, Babel...(它也破坏了我的工作)

将事物从 node_modules 移出到 assets 的问题在于,如果您的应用有 100 个依赖项,那么您不会想要这样做 100 次。您不妨将在node_modules 中找到的完整源代码保存在您的源代码控制系统中。当然,这是有代价的,该文件夹的大小可能很大。

可以通过使用不同的工具和方法找到良好的平衡。您是否供应第三方依赖项(存储您自己的副本)取决于在您的情况下具有更好的成本/风险比。

【讨论】:

    猜你喜欢
    • 2021-04-16
    • 2014-06-14
    • 2021-05-01
    • 2018-11-02
    • 1970-01-01
    • 2018-11-27
    • 2020-11-17
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多