所有的包管理器都有许多缺点,我们可以根据项目选择适合自己的。
历史
npm开始管理node.js模块(这就是默认情况下包进入node_modules的原因),但是当它与Browserify或webpack结合使用时,它也适用于前端。
Bower专为前端而设计,并以此为基础进行了优化。
包的大小
npm远比bower大得多,包括通用JavaScript。
Bower的包安装数量少的多。
处理样式等
Bower引入样式。
npm专注于JavaScript。样式可以单独下载,也可以通过npm-sass或sass-npm等方式下载。
依赖处理
最大的区别是npm执行嵌套依赖项(但默认情况下是平坦的),而Bower需要一个平面依赖树(将依赖项解析的负担放在用户身上)。
嵌套依赖树意味着您的依赖项可以拥有自己的依赖项,这些依赖项可以拥有自己的依赖项,依此类推。这允许两个模块需要相同依赖的不同版本并且仍然有效。请注意,从npm 3开始,依赖关系树将默认为flat(节省空间),并且只在需要的地方嵌套,例如,如果两个依赖关系需要他们自己的Underscore版本。
有些项目同时使用Bower作为前端软件包,npm用于开发人员工具,如Yeoman,Grunt,Gulp,JSHint,CoffeeScript等。