你如何比较npm
,bower
和volo
?
这三个都可以用于为UI项目安装JavaScript依赖项。我了解npm
是特定于节点的。
那么,什么时候使用什么呢?
npm
依然屹立遥远,但bower
并volo
似乎正好解决同样的问题,虽然我不是能画之间的线路npm
和bower-volo
。
你如何比较npm
,bower
和volo
?
这三个都可以用于为UI项目安装JavaScript依赖项。我了解npm
是特定于节点的。
那么,什么时候使用什么呢?
npm
依然屹立遥远,但bower
并volo
似乎正好解决同样的问题,虽然我不是能画之间的线路npm
和bower-volo
。
Answers:
最能描述npm和bower区别的描述是:npm管理称为包的JavaScript模块,而Bower管理称为组件的前端组件(即css,html和JavaScript)。npm也用于安装凉亭。这是有关npm和bower(不涉及volo)的广泛文章,其中涉及很多细节。
尽管它几乎没有功能,但在前端开发人员中仍然很受欢迎。每个前端程序包都在使用它。还有一项将凉亭合并到npm中的计划。
Bower针对客户端进行了优化,并且仅支持平面依赖树,即每个库只能使用一次(因为将同一库的不同版本发送给客户端非常昂贵),并且依赖关系约束必须由用户解决。
您可以期望在Bower注册表中找到与前端相关的任何内容(bower search <some keyword>
)中 -在我看来,相对于其他程序包管理器,这是bower的最大优势。
我多年来仍未使用它超过5分钟。不知道,但是从我所看到的它确实包含一些构建工具,Grunt用户非常熟悉。
是的,npm代表节点软件包管理器。但是如今,您可以将其用于所有内容;人们不再npm install
只吃东西,并期望它们只能在Node环境中工作。例如,Twitter Bootstrap有许多npm软件包。
Npm通过嵌套的依赖关系树针对服务器端使用进行了优化。每个依赖项可以有自己的依赖项,可以有自己的依此类推。由于每个依赖项可以使用自己的Underscore版本,因此消除了依赖项版本冲突。但是,即将发布的npm版本3将展平依赖树:
使用npm @ 3,您的node_modules目录将变得更加讨人喜欢。您的所有依存关系和大多数子依存关系(和(子)+依存关系)将在顶层彼此相邻。只有在发生冲突时,才可以在更深层次上安装模块。对于Windows用户,这应该使事情变得容易得多。
我在使用npm时看到的一些优点:
npm是JavaScript的软件包管理器。
截至2013年2月,我的看法如下。请不要再考虑了。
最好在使用Node项目时坚持使用它,浏览器也可以使用很少的项目...
Bower现在是流行歌手。他们有很多项目在进行中,项目维护者喜欢在Bower Registry中保持最新状态...
可惜他有时有点马车。
从那以后,我没有尝试过5分钟以上的volo,但是从我的角度看,它看上去比凉亭更灵活。
Volo的不利之处在于他们的项目已经过时了。
他们似乎正在解决相同的问题,但适用于不同的环境/世界。NPM用于nodejs和volo,用于浏览器的bower。
事实是,您还可以使用NPM来管理浏览器的javascript和CSS。没有什么可以阻止您这样做。从这个意义上讲,使用NPM对我而言比必须为同一目的管理两个不同的工具更为自然。
看来凉亭有更多可用的软件包,至少对于更流行的软件包而言。但是很快jQuery也将直接在NPM中可用,可能所有其他库都将遵循相同的趋势。
在我看来,因为有一样的工具browserify和webmake在那里,在浏览器的帮助使用节点模块,没有了一个真正的需要凉亭或VOLO,除非他们提供的东西别人为你(一个特定的模块只存在于他们的注册表)。
无论瓦罗和鲍尔都很好,但是从我的角度来看,如果您已经在使用NPM,则最好坚持使用它。
请注意,即使不使用browserify或webmake,也可以使用NPM来管理客户端依赖性。在我正在从事的大多数项目中,安装npm模块后,我运行脚本将其部署到客户端应用程序使用它们的位置。有时我会用grunt将该文件与其他js文件连接起来,有时我会直接从Web应用程序的模板文件中引用它。无论如何,这是个人喜好。其他人可能会发现Bower或Volo更易于使用,因为它们更自然地适合其工作流程。
yeoman
项目已经选择时,为什么选择了新的软件包管理器npm
?(这是成熟的,着名的和功能丰富的)这个想法使我感到我仍然缺少实际要点。
npm
而赞成前端简单。因此用于前端开发。
Bower与NPM相比,最大的优势是其依赖关系管理使用组件的单个版本来实施(而NPM通过将不同的副本/版本作为不同模块的子依赖项来工作)。这是一件好事事情,因为它可以防止您的客户端javascript由于需要包含不同版本的组件的多个副本而变得肿。包含模块的多个副本是NPM依赖性管理工作方式的核心,因此NPM完全不适合客户端软件包管理。
上面的结果是,Bower软件包的维护者和消费者必须更加谨慎地维护其依赖版本号以避免冲突,但这是值得付出的代价。而且我发现NPM模块在发行主要版本,次要版本和修补程序版本时通常都很草率,因此NPM依赖性管理也不是一件容易的事。
我知道这不在问题范围内,但还有另一种选择。Jam JS- http://jamjs.org/有趣的一件事是,它在jam中具有强大的功能:
jam compile output.js
有人应该再做一个包管理器并命名为:yapm :)