Bower 和 npm 有什么区别?

2022-08-29 21:55:47

和 的根本区别是什么?只是想要一些简单明了的东西。我看到我的一些同事在他们的项目中使用和互换。bowernpmbowernpm


答案 1

所有包管理器都有许多缺点。你只需要选择你可以忍受的。

历史

npm最初管理node.js模块(这就是包默认进入的原因),但是当与Browserifywebpack结合使用时,它也适用于前端。node_modules

Bower是专门为前端创建的,并考虑到这一点进行了优化。

回购大小

npm比bower大得多,包括通用的JavaScript(例如用于国家信息或在前端或后端可用的排序功能)。country-datasorts

Bower的软件包数量要少得多。

样式等的处理

鲍尔包括样式等。

npm专注于JavaScript。样式可以单独下载,也可以由 类似 或 之类的内容要求。npm-sasssass-npm

依赖关系处理

最大的区别是npm做嵌套的依赖关系(但默认情况下是平坦的),而Bower需要一个扁平的依赖关系树(把依赖关系解决的负担放在用户身上)。

嵌套的依赖项树意味着您的依赖项可以有自己的依赖项,这些依赖项可以有自己的依赖项,依此类推。这允许两个模块需要同一依赖项的不同版本并且仍然有效。请注意,从 npm v3 开始,依赖项树在默认情况下将是平面的(节省空间),并且仅在需要时嵌套,例如,如果两个依赖项需要自己的下划线版本。

有些项目同时使用两者:它们将 Bower 用于前端包,将 npm 用于开发人员工具,如 Yeoman、Grunt、Gulp、JSHint、CoffeeScript 等。


资源


答案 2

这个答案是对Sindre Sorhus答案的补充。npm和Bower之间的主要区别在于它们处理递归依赖关系的方式。请注意,它们可以在单个项目中一起使用。

关于 npm 常见问题解答(archive.org 2015 年 9 月 6 日的链接)

在没有嵌套依赖关系的情况下避免依赖关系冲突要困难得多。这是 npm 工作方式的基础,并且已被证明是一种非常成功的方法。

鲍尔主页上:

Bower 针对前端进行了优化。Bower 使用平面依赖关系树,每个包只需要一个版本,从而将页面负载降至最低。

简而言之,npm旨在实现稳定。Bower的目标是将资源负荷降至最低。如果绘制出依赖关系结构,您将看到以下内容:

npm:

project root
[node_modules] // default directory for dependencies
 -> dependency A
 -> dependency B
    [node_modules]
    -> dependency A

 -> dependency C
    [node_modules]
    -> dependency B
      [node_modules]
       -> dependency A 
    -> dependency D

如您所见,它以递归方式安装一些依赖项。依赖关系 A 有三个已安装的实例!

凉亭:

project root
[bower_components] // default directory for dependencies
 -> dependency A
 -> dependency B // needs A
 -> dependency C // needs B and D
 -> dependency D

在这里,您可以看到所有唯一的依赖项都位于同一级别。

那么,为什么要使用npm呢?

npm会安装这个依赖关系的两个版本,所以它无论如何都会工作,但是Bower会给你一个冲突,因为它不喜欢重复(因为在网页上加载相同的资源是非常低效和昂贵的,它也会给出一些严重的错误)。您必须手动选择要安装的版本。这可能会产生其中一个依赖项将中断的效果,但这是您无论如何都需要修复的问题。

因此,常见的用法是Bower用于要在网页上发布的包(例如运行时,避免重复),并将npm用于其他内容,例如测试,构建,优化,检查等(例如开发时间,其中重复不太重要)。

npm 3 的更新:

与 Bower 相比,npm 3 仍然以不同的方式做事。它将全局安装依赖项,但仅适用于它遇到的第一个版本。其他版本安装在树中(父模块,然后node_modules)。

  • [node_modules]
    • 出发 A v1.0
    • 出发 B v1.0
      • dep A v1.0 (使用根版本)
    • C 语言 v1.0
      • dep A v2.0(此版本与根版本不同,因此它将是嵌套安装)

有关更多信息,我建议阅读npm 3的文档