可以在webpack.config.js中链接节点模块文件吗?

时间:2019-03-09 17:50:31

标签: javascript node.js dependencies dependency-management

在某些项目中,我看到开发人员没有链接到webpack.config.js中的node_modules文件(例如,“ ./ node_modules / boostrap / dist / js / boostrap.bundle.js”),相反,他们复制了文件到Assets / js并将其链接到那里。我的一些朋友还告诉我,他们更喜欢此选项,因为他们对链接到node_modules从来都不感到安全(我猜有人可能会使用npm update ...?)

您怎么称呼“良好实践”?链接到node_modules完全可以吗?如果没有-会发生什么错误?

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

1 个答案:

答案 0 :(得分:0)

可以这样做。纯粹从构建步骤的角度来看,这没有什么不同。

在使用节点模块(npm为它们提供节点模块)和在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中找到的完整源代码保存在源代码控制系统中。当然,这是有代价的,该文件夹的尺寸可能很大。

可以使用不同的工具和方法来达到良好的平衡。是否供应第三方依赖关系(存储自己的副本)还是不依赖于哪种方法在您的情况下具有更好的成本/风险比。