提问者:小点点

npm中绑定依赖项相对于普通依赖项的优势


npm允许我们指定BundledDependencies,但是这样做有什么好处呢?我想,如果我们想确保即使我们引用的模块被删除也能得到正确的版本,或者捆绑带来了速度上的好处?

有人知道BundledDependencies相对于普通依赖关系的优势吗?


共3个答案

匿名用户

Node现在最大的问题之一是它的变化速度有多快。这意味着生产系统可能非常脆弱,一个NPM更新很容易破坏系统。

使用bundledDependencies是解决这个问题的一种方法,它可以确保,正如您正确推测的那样,无论其他可能发生什么变化,您都将始终交付正确的依赖项。

您还可以使用此绑定您自己的,私有的绑定包,并在安装时交付它们。

匿名用户

对于快速读者:这个QA是关于Package.json bundledDependencies字段的,而不是关于包的。

“bundleddependencies”正是其名称所暗示的。应该位于项目内部的依赖项。因此其功能与普通依赖项基本相同。在运行NPM Pack时,它们也将被打包。

通常从npm注册表安装正常的依赖项。因此,捆绑依赖项在以下情况下非常有用:

  • 您要重用不是来自npm注册表或已修改的第三方库
  • 您希望将自己的项目作为模块重用
  • 您希望与模块一起分发一些文件

通过这种方式,您不必创建(并维护)自己的npm存储库,但可以获得与从npm包中获得的相同好处。

在开发时,我并不认为主要是防止意外更新。我们有更好的工具,即代码存储库(git,mercurial,SVN.。。)或者现在锁定文件。

要pin包版本,可以使用:

>

  • 选项1:使用节点8附带的更新的NPM版本5。它使用一个package-lock.json文件(请参阅node blog和node 8版本)

    选项2:使用纱线代替npm。它是一个来自facebook的包管理器,比npm快,并且它使用了一个yarn.lock文件。否则,它将使用相同的package.json

    这与其他包管理器(如Bundler或Cargo)中的锁文件相当。它类似于NPM的npm-shrinkwrapp.json,但是它不是有损的,并且创建了可复制的结果。

    npm实际上是从yar中复制了这个特性。

    • 选项3:这是以前推荐的方法,我不再推荐了。其想法是大多数时候使用npm shrinkwrap,有时将整个内容(包括node_module文件夹)放入代码存储库。或者可能使用收缩包。在Node.js博客和joyent开发人员网站上讨论了当时的最佳实践。

    这有点超出了问题的范围,但我想提及(我所知道的)最后一类依赖关系:对等依赖关系。另外,请参阅这个相关的SO问题,可能还有关于BundledDependencies的yars的文档。

  • 匿名用户

    另一个优点是,您可以将内部依赖项(应用程序组件)放在那里,然后在应用程序中只需要它们,就像它们是独立的模块一样,而不是把lib/弄得乱七八糟并将它们发布到NPM。

    如果/当它们成熟到可以作为单独的模块存在的程度时,您可以轻松地将它们放在npm上,而无需修改您的代码。