Javascript 鲍尔和npm的区别是什么?

Javascript 鲍尔和npm的区别是什么?,javascript,npm,bower,Javascript,Npm,Bower,bower和npm之间的根本区别是什么?只要简单明了的东西。我看到我的一些同事在他们的项目中互换地使用bower和npm。所有的包经理都有许多缺点。你只需要选择你能接受的 历史 从管理node.js模块开始(这就是包在默认情况下进入node\u模块的原因),但与or组合使用时,它也适用于前端 仅为前端创建,并考虑到这一点进行了优化 回购规模 npm比bower大得多,包括通用JavaScript(如用于国家信息的国家数据,或用于前端或后端可用的排序功能的排序) 鲍尔的包裹数量要少得多 处理风格等

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

所有的包经理都有许多缺点。你只需要选择你能接受的

历史 从管理node.js模块开始(这就是包在默认情况下进入
node\u模块
的原因),但与or组合使用时,它也适用于前端

仅为前端创建,并考虑到这一点进行了优化

回购规模 npm比bower大得多,包括通用JavaScript(如用于国家信息的
国家数据
,或用于前端或后端可用的排序功能的
排序

鲍尔的包裹数量要少得多

处理风格等 凉亭包括样式等

npm专注于JavaScript。样式可以单独下载,也可以由类似
npm-sass
sass-npm
的内容所需

依赖处理 最大的区别是npm没有嵌套的依赖项(但默认情况下是扁平的),而Bower需要扁平的依赖项树(将依赖项解析的负担放在用户身上)

嵌套的依赖关系树意味着您的依赖关系可以有自己的依赖关系,这些依赖关系可以有自己的依赖关系,依此类推。这允许两个模块需要相同依赖项的不同版本,并且仍然可以工作。注意:自npm v3以来,依赖关系树在默认情况下是平坦的(节省空间),并且仅在需要时嵌套,例如,如果两个依赖关系需要自己的下划线版本

有些项目同时使用这两种工具:它们使用Bower作为前端包,使用npm作为开发工具,如Yeoman、Grunt、Gulp、JSHint、CoffeeScript等


资源
  • -深入了解node_模块为何以这种方式工作

    • 鲍尔维护单一版本的模块,它只会帮助您选择正确/最佳的模块

      NPM更适合节点模块,因为有一个模块系统,您在本地工作。
      Bower非常适合浏览器,因为目前只有全局范围,并且您希望对使用的版本进行严格选择。

      一方面,创建npm是为了安装node.js环境中使用的模块,或使用node.js构建的开发工具,如Karma、lint、Minifier等。npm可以在一个项目中本地安装模块(默认情况下安装在node_模块中),也可以全局安装模块以供多个项目使用。在大型项目中,指定依赖项的方法是创建一个名为package.json的文件,其中包含依赖项列表。当您运行npm安装时,npm会识别该列表,然后npm会为您下载并安装它们

      另一方面,创建bower是为了管理前端依赖关系。像jQuery、AngularJS、下划线等库。与npm类似,它有一个文件,您可以在其中指定一个名为bower.json的依赖项列表。在这种情况下,通过运行bower install来安装前端依赖项,默认情况下,bower install将前端依赖项安装在名为bower_components的文件夹中

      正如您所看到的,尽管它们执行类似的任务,但它们的目标是一组非常不同的库


      对于许多使用node.js的人来说,bower的一个主要好处是管理根本不是javascript的依赖项。如果他们使用编译成javascript的语言,npm可以用来管理他们的一些依赖关系。但是,并不是所有的依赖项都是node.js模块。一些编译成javascript的人可能会有一些奇怪的源语言特有的混乱,这使得在用户需要源代码时,将编译成javascript的代码传递给其他人是一种不雅观的选择


      并非npm包中的所有内容都需要面向用户的javascript,但对于npm库包,至少有一部分应该是面向用户的。

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

      上:(archive.org链接,自2015年9月6日起)

      如果不嵌套,则要避免依赖冲突要困难得多 依赖关系。这是npm工作方式的基础,并且 这被证明是一种非常成功的方法

      主页:

      Bower针对前端进行了优化。Bower使用平面依赖关系 树,每个包只需要一个版本,减少了页面负载 最低限度

      简言之,npm的目标是稳定。Bower的目标是将资源负载降至最低。如果绘制依赖关系结构,您将看到:

      npm:

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

      鲍尔:

      project root
      [bower_components] // default directory for dependencies
       -> dependency A
       -> dependency B // needs A
       -> dependency C // needs B and D
       -> dependency D
      
      在这里,您可以看到所有唯一的依赖项都位于同一级别

      那么,为什么还要麻烦使用npm呢?

      可能依赖项B需要的依赖项a的版本与依赖项C不同。npm安装这两个版本的依赖项,因此它无论如何都可以工作,但Bower会给您带来冲突,因为它不喜欢重复(因为在网页上加载相同的资源效率很低,成本很高,而且可能会出现一些严重错误)。您必须手动选择要安装的版本。这可能会导致其中一个依赖项中断,但这是您无论如何都需要解决的问题

      因此,常见的用法是Bower用于您希望在网页上发布的软件包(例如,运行时,您可以在其中避免重复),并使用npm用于其他内容,如测试、构建、优化、检查等(例如,开发时间,其中不太关注重复)

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