JavaScript依赖管理:npm vs. bower vs. volo

Yug*_*dle 160 javascript node.js npm bower volojs

你怎么比较npm,bowervolo

这三个都可用于为UI项目安装JavaScript依赖项.我理解npm更多节点特定.

那么,何时使用什么?

npm依然屹立遥远,但bowervolo似乎正好解决同样的问题,虽然我不是能画之间的线路npmbower-volo.

str*_*ops 104

最能描述npm和bower之间差异的描述是:npm管理称为包的JavaScript模块,Bower管理称为组件的前端组件(即css,html和JavaScript).npm也用于安装凉亭.这是一篇关于npm和bower广泛文章(不包括volo),它有很多细节.

  • 这不是一个很好的描述.Npm肯定可以用来安装前端组件. (88认同)
  • @Nate这个名字就是它开始的地方.NPM现在是一个非常通用的包管理系统.我经常使用npm来安装前端模块.使用NPM for commonjs模块,与amd相比,没有任何区别.您也可以使用npm以及非JavaScript模块.因此,这根本不是npm和bower之间的区别.无论您将它们称为包还是组件,它们都是相同的,因为它们都是任意文件的集合. (4认同)
  • 如果你使用[browserify](http://browserify.org/),npm是一个完美的包管理器.我认为你使用哪个软件包管理器并不重要,但我个人只会坚持每个项目一个. (3认同)
  • 链接坏了 (3认同)
  • 考虑到bower没有处理html,css和javascript的政策,这是一个非常误导性的答案.npm没有任何政策,除了几乎所有关于npm的内容都写入至少支持commonjs和偶尔其他格式.您可以将html和css放在npm包中,就像使用bower一样.npm上有许多只有前端的包,包括包含css和html的包. (2认同)

gus*_*nke 72

亭子

它仍然在前端开发人员中非常受欢迎,尽管它的功能很少.每个前端包都在使用它.还有一项倡议将bower合并到npm.

Bower针对客户端进行了优化,仅支持平面依赖树,即每个库必须只使用一次(因为将相同库的不同版本发送到客户端的成本很高),并且依赖性约束必须由用户解决.

您可以期待在凉亭注册表中找到与前端相关的任何内容(bower search <some keyword>) - 在我看来,这是凉亭相对于其他包管理器的最大优势.

VOLO

多年来我还没有使用它超过5分钟.不知道它,但从我可以看到它确实包括一些构建工具,这是Grunt用户非常熟悉的.

NPM

是的,npm代表Node Package Manager.但是现在你可以把它用于一切; 人们不再只是在npm install做事情,并期望他们在Node环境中工作.例如,Twitter Bootstrap有许多npm包.

Npm针对服务器端使用进行了优化,具有嵌套的依赖关系树.每个依赖项都可以有自己的依赖项,可以有自己的依赖项,依此类推.这消除了依赖版本冲突,因为每个依赖项可以使用它们自己的版本,例如Underscore.但是,即将推出的npm版本3将使依赖树变平:

使用npm @ 3,您的node_modules目录将更加平坦.所有依赖项和大多数子依赖项(以及(子)+依赖项)将在顶层彼此相邻.只有在存在冲突时才会在更深层次安装模块.这应该使Windows用户更容易.

我在使用npm时看到的一些优点:

  • 它被所有其他包管理器(组件,bower,volo,JSPM等)使用;
  • 允许使用构建脚本;
  • 有许多工具可用于内省基于npm的包

npm是JavaScript的包管理器.

npmjs.com截图


截至2013年2月,我的意见如下.请不要再考虑它了.

NPM

当你使用Node项目时,最好坚持使用它,浏览器可用的项目也很少......

亭子

鲍尔现在是流行音乐人.他们有很多项目,项目维护人员喜欢在凉亭注册表中保持最新状态......

很遗憾他有时候会有点小马车.

VOLO

从那以后我没有尝试超过5分钟的volo,但从我所能看到它看起来比bower更灵活.

volo的一个负面观点是他们的项目非常过时.

  • npm上有数千个模块,它们只能在浏览器中工作,或者在节点和浏览器中工作.他们中的许多人甚至还有ci徽章,可以准确地告诉你他们在哪些浏览器中工作.在bower et all上的大多数东西都可能在npm上. (19认同)
  • 什么是"流行家伙"?"pop"是否为缩写.为了"流行"? (5认同)
  • 在你的截图中,npm代表核计划手册;) (4认同)

roy*_*jas 24

他们似乎正在解决同样的问题,但针对不同的环境/世界.用于nodejs的NPM和用于浏览器的volo,bower.

事实是,您也可以使用NPM来管理浏览器的javascript和css.没有什么能阻止你这样做.从这个意义上讲,使用NPM对我来说比为同一目的管理两种不同的工具更自然.

看起来凉亭有更多的包可用,至少对于更受欢迎的包.但很快jQuery也将直接在NPM中提供,并且可能所有其他库都将遵循相同的趋势.

在我看来,因为有一样的工具browserifywebmake在那里,在浏览器的帮助使用节点模块,没有了一个真正的需要凉亭VOLO,除非他们提供的东西给你(一个特定的模块只存在于他们的注册表).

无论瓦罗鲍尔也很好,但是从我的角度来看,如果你已经在使用NPM,它可能会更好地坚持下去.

请注意,即使不使用browserify或webmake,您也可以使用NPM来管理客户端依赖项.在我正在处理的大多数项目中,在安装npm模块之后,我运行一个脚本将它们部署到我的客户端应用程序使用它们的位置.有时我使用grunt将该文件与其他js文件连接起来,有时我会直接从我的web应用程序的模板文件中引用它.无论如何,这是个人偏好.其他人可以更容易地使用Bower或Volo,因为它们在工作流程中更自然.


whe*_*hys 15

Bower比NPM更大的优势在于它的依赖关系管理强制使用单个版本的组件(而NPM通过将不同的副本/版本作为不同模块的子依赖性来工作).这是非常好的事情,因为它可以防止您的客户端javascript因需要在不同版本中包含组件的多个副本而变得臃肿.包含模块的多个副本是NPM依赖管理如何工作的核心,因此NPM完全不适合客户端包管理.

上述结果是,bower软件包维护者和消费者必须更加注意维护其依赖版本号以避免冲突,但这是值得付出的代价.我发现NPM模块在发布主要版本,次要版本和修补程序版本时往往很草率,因此NPM依赖关系管理也不是一缕玫瑰花.

  • 只有当您直接从包管理器将这些文件放入的文件夹中提供前端代码时,才会出现这种情况.在我的情况下,我要么有构建脚本来处理less/js文件,要么browserify从这些文件创建一个bundle.所以这在我的案例中并不是一个大问题.分发的代码总是具有正确的版本,即使其他子组件在开发期间可能具有重复项,也从未进入生产阶段. (3认同)

Bru*_*Lim 5

我知道这不在问题的范围内,但也有另一种选择.Jam JS - http://jamjs.org/有趣的是它在jam中具有强大的功能:

jam compile output.js
Run Code Online (Sandbox Code Playgroud)

有人应该再做一个包经理并命名它:yapm :)

  • 您的愿望是:https://github.com/rlidwka/yapm:P (5认同)