0

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

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

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

4

1 回答 1

1

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

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

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

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

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

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

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

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

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

于 2019-03-10T00:03:33.903 回答