NPM/Bower/Composer 之间有什么区别?

114

有人能向我解释 NPM, Bower, 和 Composer 之间的区别吗?

它们都是包管理器 - 对吗?

但是每个应该在什么时候使用呢?

此外,每个似乎都有一个附带的 json 文件,这个文件是否存储了您需要的所有软件包,以便可以通过命令行安装?为什么需要这个文件?


还要在列表中添加Yarn(https://yarnpkg.com/),NuGet(https://www.nuget.org/)和Chocolatey(https://chocolatey.org/),同时阅读:https://en.wikipedia.org/wiki/List_of_software_package_management_systems。 - mijaved
1个回答

208

[四年后的更新]

  • Bower已被弃用,不应再用于新项目。在很大程度上,它已被纳入到Node依赖管理中(从他们的网站上获知:“虽然Bower仍在维护,但我们建议使用Yarn和Webpack或Parcel进行前端项目开发”)。
  • Yarn出现了,作为一个更好的npm(修复了npm的一些缺点),如果您正在进行前端或Node开发,则应该使用Yarn,因为它是新的事实标准。它使用与npm相同的package.json,几乎完全兼容。
  • 我此时不会使用composer(因为我不会使用php),尽管它似乎仍然活跃和流行。

[原始回答]

npm是nodejs的包管理器,因此它针对的是nodejs环境,这通常意味着服务器端nodejs项目或命令行项目(bower本身是一个npm包)。如果您要使用nodejs做任何事情,那么您将使用npm。

bower是一个旨在(前端)Web项目的包管理器。您需要npm和nodejs来安装bower并执行它,尽管bower包不是专门针对nodejs的,而是针对“浏览器”环境。

composer是针对php项目的依赖项管理器。如果你要做一些symfony(或纯php)方面的事情,这很可能是可行的方式。

总之:

  • 使用node? 用npm
  • 使用php?试试composer
  • 前端JavaScript?试试bower

是的,“json”文件描述了基本的软件包信息和依赖关系。是的,它们是必需的。

那么README呢? :-)


8
对于 PHP + 前端应用程序,最好的选择是什么? - sompylasar
15
取决于你的划分标准。如果你的MVC是用JavaScript编写的(而PHP只作为Web服务),那么可能会使用Bower。如果你的MVC是用PHP编写的(比如Symfony),并且有一大堆JavaScript嵌入在服务器端视图中,那么Composer可能是最好的选择。 - Mangled Deutz
24
最令人烦恼和低效的部分是当你在处理一些库时,有些只使用Bower,有些只使用Composer,还有些只使用npm。如果能找到一个单一的包管理器,通过一个命令来处理所有这些不同的包管理器,那就太好了。它应该被称为"Inception"。 - Angel S. Moreno
34
我认为@AngelS.Moreno是正确的。有太多的人提议再来第四个(活动/项目等)。 :) - Eric
2
@AngelS.Moreno 你说得对,我甚至会更进一步,不仅仅停留在安装程序和依赖管理器上。有太多东西了。太多做同样功能的JS库,太多PHP框架等等。如果人们能够共同合作在一个项目上,对很多人来说生活将会发生改变。 - JG Estiot
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接