Bower 和 npm 有什么区别?
和 的根本区别是什么?只是想要一些简单明了的东西。我看到我的一些同事在他们的项目中使用和互换。bower
npm
bower
npm
和 的根本区别是什么?只是想要一些简单明了的东西。我看到我的一些同事在他们的项目中使用和互换。bower
npm
bower
npm
所有包管理器都有许多缺点。你只需要选择你可以忍受的。
npm最初管理node.js模块(这就是包默认进入的原因),但是当与Browserify或webpack结合使用时,它也适用于前端。node_modules
Bower是专门为前端创建的,并考虑到这一点进行了优化。
npm比bower大得多,包括通用的JavaScript(例如用于国家信息或在前端或后端可用的排序功能)。country-data
sorts
Bower的软件包数量要少得多。
鲍尔包括样式等。
npm专注于JavaScript。样式可以单独下载,也可以由 类似 或 之类的内容要求。npm-sass
sass-npm
最大的区别是npm做嵌套的依赖关系(但默认情况下是平坦的),而Bower需要一个扁平的依赖关系树(把依赖关系解决的负担放在用户身上)。
嵌套的依赖项树意味着您的依赖项可以有自己的依赖项,这些依赖项可以有自己的依赖项,依此类推。这允许两个模块需要同一依赖项的不同版本并且仍然有效。请注意,从 npm v3 开始,依赖项树在默认情况下将是平面的(节省空间),并且仅在需要时嵌套,例如,如果两个依赖项需要自己的下划线版本。
有些项目同时使用两者:它们将 Bower 用于前端包,将 npm 用于开发人员工具,如 Yeoman、Grunt、Gulp、JSHint、CoffeeScript 等。
这个答案是对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)。
有关更多信息,我建议阅读npm 3的文档