在 webpack.config.js 中 link 节点模块文件可以吗?
Is it okay to link node modules files in webpack.config.js?
在某些项目中,我看到开发人员没有 link 到 webpack.config.js 中的 node_modules 文件(例如“./node_modules/boostrap/dist/js/boostrap.bundle.js” ),相反,他们将文件复制到 assets/js 并在那里 link 编辑。我的一些朋友还告诉我,他们更喜欢这个选项,因为他们从 link 到 node_modules 从来没有感到安全(我猜有人可能会使用 npm update
...?)
你会怎么称呼 "good practice"? link 到 node_modules 完全没问题吗?如果不是 - 会发生什么错误?
我在小型项目中使用了这种方法,因为我认为不需要加倍文件,但在较大的项目中 - 为了安心 - 我使用了资产的路径
可以做到。纯粹从构建步骤的角度来看,它没有什么不同。
您在使用 npm 提供的节点模块 (node_modules) 和在 assets
或 vendors
文件夹中存储您自己的副本之间做出的权衡是关于:
- 安全
- 源代码管理&开发效率
- 存储space
当全世界数以千计的开发人员都创建了小项目并将它们推送到 Github 时,让他们所有人都存储自己的 JQuery 副本并没有意义然后将其推送到他们的 Github 仓库中。相反,我们推送一个将其列为依赖项的 package.json 文件,我们对每个第三方依赖项都这样做,并防止创建一个存储库,其中很多(甚至大部分)代码不是应用程序代码,而是依赖项。不错。
另一方面,如果开发人员总是在每次新项目 started/cloned/forked 时下载依赖项,那么您可能会面临每次下载模块时安装受损包版本的风险。为此,我们使用漏洞扫描器、语义版本控制和锁定文件 (package-lock.json
) 来解决这个问题,让您可以控制获取更新的方式和时间。
总是下载的另一个问题是它消耗的带宽。为此,我们使用本地缓存来解决。因此,即使您从一个项目中卸载了一个模块,npm 也不会真正将其从您的驱动器中删除。它在缓存文件夹中保留一份副本。这对大多数开发人员来说非常有效,但在拥有大量应用程序的企业环境中效果不佳。
一个已经严重影响世界的问题是,如果模块作者决定删除代码,那么许多应用程序将停止工作,因为它们无法再找到依赖项。参见 left-pad broke Node, Babel...(它也破坏了我的工作)
将内容从 node_modules
移到 assets
的问题在于,如果您的应用程序有 100 个依赖项,您将不会想要这样做 100 次。您不妨将在 node_modules
中找到的完整源代码保存在您的源代码控制系统中。当然,这是有代价的,那个文件夹可能有很大的尺寸。
可以通过使用不同的工具和方法找到良好的平衡。您是否出售第三方依赖项(存储您自己的副本)取决于您所处情况的 cost/risk 比率。
在某些项目中,我看到开发人员没有 link 到 webpack.config.js 中的 node_modules 文件(例如“./node_modules/boostrap/dist/js/boostrap.bundle.js” ),相反,他们将文件复制到 assets/js 并在那里 link 编辑。我的一些朋友还告诉我,他们更喜欢这个选项,因为他们从 link 到 node_modules 从来没有感到安全(我猜有人可能会使用 npm update
...?)
你会怎么称呼 "good practice"? link 到 node_modules 完全没问题吗?如果不是 - 会发生什么错误?
我在小型项目中使用了这种方法,因为我认为不需要加倍文件,但在较大的项目中 - 为了安心 - 我使用了资产的路径
可以做到。纯粹从构建步骤的角度来看,它没有什么不同。
您在使用 npm 提供的节点模块 (node_modules) 和在 assets
或 vendors
文件夹中存储您自己的副本之间做出的权衡是关于:
- 安全
- 源代码管理&开发效率
- 存储space
当全世界数以千计的开发人员都创建了小项目并将它们推送到 Github 时,让他们所有人都存储自己的 JQuery 副本并没有意义然后将其推送到他们的 Github 仓库中。相反,我们推送一个将其列为依赖项的 package.json 文件,我们对每个第三方依赖项都这样做,并防止创建一个存储库,其中很多(甚至大部分)代码不是应用程序代码,而是依赖项。不错。
另一方面,如果开发人员总是在每次新项目 started/cloned/forked 时下载依赖项,那么您可能会面临每次下载模块时安装受损包版本的风险。为此,我们使用漏洞扫描器、语义版本控制和锁定文件 (package-lock.json
) 来解决这个问题,让您可以控制获取更新的方式和时间。
总是下载的另一个问题是它消耗的带宽。为此,我们使用本地缓存来解决。因此,即使您从一个项目中卸载了一个模块,npm 也不会真正将其从您的驱动器中删除。它在缓存文件夹中保留一份副本。这对大多数开发人员来说非常有效,但在拥有大量应用程序的企业环境中效果不佳。
一个已经严重影响世界的问题是,如果模块作者决定删除代码,那么许多应用程序将停止工作,因为它们无法再找到依赖项。参见 left-pad broke Node, Babel...(它也破坏了我的工作)
将内容从 node_modules
移到 assets
的问题在于,如果您的应用程序有 100 个依赖项,您将不会想要这样做 100 次。您不妨将在 node_modules
中找到的完整源代码保存在您的源代码控制系统中。当然,这是有代价的,那个文件夹可能有很大的尺寸。
可以通过使用不同的工具和方法找到良好的平衡。您是否出售第三方依赖项(存储您自己的副本)取决于您所处情况的 cost/risk 比率。