npm允许我们指定bundledDependencies
,但是这样做有什么好处?我猜想是否即使删除引用的模块也要绝对确保获得正确的版本,或者捆绑有速度优势?
有人知道bundledDependencies
超过普通依赖项的好处吗?
npm允许我们指定bundledDependencies
,但是这样做有什么好处?我猜想是否即使删除引用的模块也要绝对确保获得正确的版本,或者捆绑有速度优势?
有人知道bundledDependencies
超过普通依赖项的好处吗?
Answers:
目前,Node最大的问题之一是它的变化速度如何。这意味着生产系统可能非常脆弱,并且npm update
很容易损坏东西。
使用bundledDependencies是解决此问题的一种方法,可以确保在正确推测的情况下始终提供正确的依赖关系,而不管其他可能发生的变化。
您还可以使用它捆绑您自己的私有捆绑包,并随安装一起提供。
npm update
不会影响bundledDependencies中的任何依赖关系?
对于快速读者:此质量检查与package.json bundledDependencies字段有关,而不与package有关。
“ bundledDependencies”正是其名称所暗示的含义。项目内部应具有的依赖关系。因此,功能基本上与常规依赖项相同。它们在运行时也会被打包npm pack
。
正常依赖关系通常是从npm注册表中安装的。因此,捆绑的依赖项在以下情况下很有用:
这样,您不必创建(和维护)自己的npm存储库,但可以获得与npm包相同的收益。
但是,在开发时,我认为重点不是要防止意外更新。为此,我们有更好的工具,即代码存储库(git,mercurial,svn ...)或现在锁定文件。
要固定您的软件包版本,可以使用:
选项1:使用节点8随附的更新的NPM版本5。它使用package-lock.json
文件(请参阅节点博客和节点8版本)。
选项2:使用yarn代替npm
。它是来自facebook的软件包管理器,比npm
使用yarn.lock
文件更快速。package.json
否则使用相同的方法。
这与其他软件包管理器(如Bundler或Cargo)中的锁文件相当。它类似于npm的npm-shrinkwrap.json,但是它不是有损的,并且可以产生可重复的结果。
npm
实际上是从中复制了该功能yarn
。
npm shrinkwrap
大多数时间使用,有时将包括node_module文件夹在内的整个内容放入代码存储库中。或者可能使用收缩包装。当时的最佳做法在node.js博客和Joyent开发者网站上进行了讨论。这有点超出问题的范围,但是我想提一下我所知道的最后一种依赖:对等依赖。另请参阅此相关的SO问题以及yarn
关于bundledDependencies的文档。
npm install -g shrinkpack
工具自动执行此过程。
另一个优点是,您可以将内部依赖项(应用程序组件)放在此处,然后仅在应用程序中要求它们就好像它们是独立模块一样,而不是使您的lib /混乱并发布到npm。
如果/当它们成熟到可以作为单独的模块存在时,您可以轻松地将它们放在npm上,而无需修改代码。
从操作上讲,我将bundledDependencies视为模块的私有模块存储,其中的依赖关系更加公开,可以在模块及其依赖关系(和子依赖关系)之间解决。您的模块可能依赖于较旧的版本,例如react,但是依赖项需要最新和最新的。您的软件包/安装程序将在中生成您的固定版本node_modules/$yourmodule/node_modules/react
,而您的依赖项将在中获取其版本node_modules/react
(或node_modules/$dependency/node_modules/react
如果他们倾向的话)。
一个警告:我最近遇到了一个依赖关系,该依赖关系未正确配置其对react的依赖关系,而在bundledDependencies中进行反应导致该依赖模块在运行时失败。