当前位置: 首页 > 知识库问答 >
问题:

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

汪甫
2023-03-14

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

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

共有3个答案

步博涉
2023-03-14

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

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

奚翰海
2023-03-14

对于快速读者:这个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的文档。

  • 陆洲
    2023-03-14

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

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

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

     类似资料:
    • 问题内容: npm允许我们指定,但是这样做有什么好处?我猜想我们是否要绝对确保即使删除了我们引用的模块也可以得到正确的版本,或者捆绑有速度方面的好处? 有人知道超过普通依赖项的好处吗? 问题答案: 目前,Node最大的问题之一是它的变化速度如何。这意味着生产系统可能非常脆弱,并且很容易损坏东西。 使用bundledDependencies是解决此问题的一种方法,可以确保在正确猜测的情况下,无论其他

    • npm是否有安装依赖作为对等依赖的选项,如yarn选项,而不是手动添加它例如: 感谢@Broncha,更新问题的更多说明 问题是如何向项目添加对等依赖。那就是 将依赖项添加到package.json中的“dependencies”中, 如何安装将其添加到package.json?中的“对等依赖”的依赖项

    • 我创建了一个依赖于SLF4J的捆绑包,因此使用Logback来实现OSGI。这一切都捆绑起来并安装正常,但是当我开始捆绑时,我得到以下异常: org.osgi.framework.BundleException: 無法解析 com.felix.test [20](R 20.0): missing requirements [com.felix.test [20](R 20.0)] osgi.wir

    • 我有一个Advision类,它使用了代理jar中的另一个类,但这个类依赖于代理jar中不存在的一个类。代理jar中不存在的这个类存在于应用程序类加载器上的另一个jar中。代理jar位于系统类加载器上。所以我没有遇到ClassDefounderRor。我已经尝试使用Transformer.forAdvise,这是在另一篇文章中建议的,但这只适用于Advise类。

    • 我想知道下面是否可行以及如何实现。 我正在学习Spring boot的教程,其中提到我们可以有一个父依赖项。 然后定义没有版本号的依赖项。 这将在项目依赖项中添加依赖项版本1.5.6。释放sping-boot-starter和sping-boot-starter-web。 就像那样,我想找到什么是<代码> Spring-上下文 spring-jdbc Spring测试 谢谢!

    • 我给ivy添加了一个依赖项(我们称之为a)。在maven central中具有pom文件的xml。Ivy使用ibiblio来解析maven依赖项。添加到常春藤中的依赖项(A)。xml具有可传递依赖项(B)。到目前为止,一切都很好。传递依赖(B)的依赖(C)不能用常春藤来解决。 我在常春藤上定义了一个新的名字。如下所示的xml: 在B的pom文件中,C在编译和测试范围中定义如下: 当我在ivy的缓存

    • 问题内容: 有没有办法在npm package.json文件中指定特定于操作系统的依赖项? 例如,如果用户正在运行Linux ,我只想将’dbus’(https://npmjs.org/package/dbus)安装为模块的依赖项。对于Mac和Windows,我会有不同的依赖关系。 问题答案: 根据您的设置,有一种可能的好方法。 npm package.json支持os键, 还有可选的Depend

    • 在上,使用require ex调用所有库。 并生成一个包含jquery的bundle