这样做是可以的。纯粹从构建步骤的角度来看,它没有任何区别。
assets
您在使用节点模块作为 npm 提供它们(node_modules)和将您自己的副本存储在一个或文件夹中之间做出的权衡是vendors
:
- 安全
- 源代码管理和开发效率
- 储存空间
当全世界成千上万的开发人员创建小型项目并将它们推送到 Github 时,所有人都存储自己的 JQuery 副本然后将其推送到他们的 Github 存储库是没有意义的。相反,我们推送一个将其列为依赖项的 package.json 文件,我们为每个第三方依赖项执行此操作,并防止创建一个存储库,其中很多(甚至大部分)代码不是应用程序代码,而是依赖项。那很好。
另一方面,如果开发人员每次启动/克隆/分叉新项目时总是下载依赖项,那么每次下载模块时,您都可能面临安装受损包版本的风险。为此,我们使用漏洞扫描器、语义版本控制和锁定文件 ( package-lock.json
) 来解决此问题,让您可以控制获取更新的方式和时间。
总是下载的另一个问题是它消耗的带宽。为此,我们使用本地缓存来解决。因此,即使您从一个项目中卸载了一个模块,npm 也不会真正从您的驱动器中删除它。它在缓存文件夹中保留一份副本。这对大多数开发人员来说非常有效,但在拥有大量应用程序的企业环境中却不是那么好。
一个已经严重影响世界的问题是,如果模块作者决定删除代码,那么许多应用程序将停止工作,因为他们再也找不到依赖项了。请参阅left-pad 破坏了 Node、Babel ......(它也破坏了我的工作)
将事情从node_modules
to移出的问题assets
是,如果您的应用程序有 100 个依赖项,那么您不会想要这样做 100 次。您不妨在源代码控制系统中保存在node_modules
. 当然,这是有代价的,该文件夹的大小可能很大。
通过使用不同的工具和方法可以找到一个很好的平衡。您是否供应第三方依赖项(存储您自己的副本)取决于在您的情况下具有更好的成本/风险比。