捆绑依赖关系优于NPM中的正常依赖关系的优点

bal*_*ton 71 dependencies node.js npm

npm允许我们指定bundledDependencies但这样做有什么好处?我想如果我们想要确保我们得到正确的版本,即使我们引用的模块被删除,或者捆绑可能有速度优势?

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

为方便起见,在这里提取bundledDependencies定义:

bundledDependencies
发布包时将捆绑的包名称数组.

如果这拼写为"bundleDependencies",那么这也是光荣的.

例如 bundledDependencies

nha*_*nha 96

对于快速阅读器:此QA是关于 package.json bundledDependencies字段,而不是关于.

bundledDependencies做了什么

"bundledDependencies"正是他们的名字所暗示的.应该在项目中的依赖关系.因此,功能与普通依赖项基本相同.他们也会在跑步时打包npm pack.

何时使用它们

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

  • 您想重新使用不是来自npm注册表或已修改的第三方库
  • 您想重新使用自己的项目作为模块
  • 你想用你的模块分发一些文件

这样,您就不必创建(和维护)自己的npm存储库,而是获得与npm软件包相同的好处.

何时使用捆绑的依赖项

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

要固定软件包版本,您可以使用:

  • 选项1:使用节点8附带的较新的NPM版本5.它使用package-lock.json文件(请参阅节点博客和节点8版本)

  • 选项2:使用纱线代替npm.它是来自facebook的包管理器,比npm它使用yarn.lock文件更快.它使用相同的package.json其他方式.

这与Bundler或Cargo等其他包管理器中的lockfiles相当.它类似于npm的npm-shrinkwrap.json,但它不是有损的,它可以产生可重复的结果.

npm实际上从yarn其他方面复制了该功能.

  • 选项3:这是之前推荐的方法,我不再推荐.这个想法是npm shrinkwrap大多数时候都在使用,有时候把整个东西,包括node_module文件夹放到你的代码库中.或者可能使用shrinkpack.当时的最佳实践在node.js博客joyent开发者网站上进行了讨论.

也可以看看

这有点超出了问题的范围,但我想提一下最后一种依赖(我知道):对等依赖.另请参阅这个相关的SO问题,可能还有yarn关于bundledDependencies的文档.

  • "包括node_module文件夹" - 用生成的代码污染你的repo是一件非常奇怪的事情......特别是当你使用本机模块时...... (6认同)
  • 我建议不要检查node_modules,因为像phantomjs这样的软件包会为当前系统安装适当的二进制文件.这意味着如果一个Dev在Linux上运行npm install并检入node_modules - 它将不适用于在Windows上克隆repo的另一个Dev.最好检查npm安装下载的tarball并将npm-shrinkwrap.json指向它们.您可以使用`npm install -g shrinkpack`工具自动执行此过程. (3认同)

Jul*_*ght 39

现在Node最大的问题之一就是它的变化速度有多快.这意味着生产系统可能非常脆弱,并且npm update很容易破坏.

使用bundledDependencies是一种解决此问题的方法,通过确保正确猜测,无论其他什么可能发生变化,您都将始终提供正确的依赖关系.

您还可以使用它来捆绑您自己的私有捆绑包并通过安装来提供它们.

  • 也许是因为你正在寻找一个**五年半的答案**!Node.JS在那个时间内移动的数量非常惊人.也许您想添加一些有用的评论作为评论? (7认同)
  • 是,对的。请注意,捆绑的依赖项在任何基本方面都可能不“正确”。它们正是捆绑 SAID 的人所正确的。 (2认同)

Bor*_*rov 22

其他优点是你可以将你的内部依赖项(应用程序组件)放在那里,然后只需要在你的应用程序中将它们作为独立模块,而不是混乱你的lib /并将它们发布到npm.

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


Cod*_*rer 6

我很惊讶我没有在这里看到这个,但是当仔细选择时,bundledDependencies可以用来生成一个可分发的包,该包将在未配置的npm pack系统上运行。npm如果您有一个未联网/不在互联网上的系统,这会很有帮助:将您的软件包放在拇指驱动器(或其他设备)上并解压缩 tarball,然后npm runnode index.js它就可以工作了。

也许有更好的方法来捆绑您的应用程序以“离线”运行,但如果有的话我还没有找到。