你如何比较npm
,bower
和volo
?
这三个都可以用于为UI项目安装JavaScript依赖项。我了解npm
是特定于节点的。
那么,什么时候使用什么呢?
npm
依然屹立遥远,但bower
并volo
似乎正好解决同样的问题,虽然我不是能画之间的线路npm
和bower-volo
。
最能描述npm和bower区别的描述是:npm管理称为包的JavaScript模块,而Bower管理称为组件的前端组件(即css,html和JavaScript)。npm也用于安装凉亭。这是有关npm和bower(不涵盖volo)的广泛文章,其中涉及很多细节。
凉亭
尽管它几乎没有功能,但在前端开发人员中仍然很受欢迎。每个前端程序包都在使用它。还有一项将Bower合并为npm的计划。
Bower针对客户端进行了优化,并且仅支持平面依赖关系树,即每个库只能使用一次(因为将同一库的不同版本发送给客户端非常昂贵),并且依赖关系约束必须由用户解决。
您可以期望在bower注册中心(bower search <some keyword>
)中找到与前端相关的任何内容-在我看来,相对于其他程序包管理器,这是bower的最大优势。
沃洛
我多年来没有使用超过5分钟。对此一无所知,但是据我所知,它确实包含一些构建工具,Grunt用户非常熟悉。
npm
是的,npm代表节点软件包管理器。但是如今,您可以将其用于所有内容。人们不再npm install
只吃东西,并期望它们只能在Node环境中工作。例如,Twitter Bootstrap有许多npm软件包。
Npm通过嵌套的依赖关系树针对服务器端使用进行了优化。每个依赖项可以有自己的依赖项,可以有自己的依此类推。由于每个依赖项可以使用自己的Underscore版本,因此消除了依赖项版本冲突。但是,即将发布的npm版本3将展平依赖树:
使用npm @ 3,您的node_modules目录将变得更加讨人喜欢。您的所有依存关系和大多数子依存关系(和(子)+依存关系)将在顶层彼此相邻。只有在发生冲突时,才可以在更深层次上安装模块。对于Windows用户,这应该使事情变得容易得多。
我在使用npm时看到的一些优点:
- 其他所有程序包管理器(组件,bower,volo,JSPM等)都使用它;
- 允许使用构建脚本;
- 有很多工具可用于内省基于npm的软件包
npm是JavaScript的软件包管理器。
截至2013年2月,我的看法如下。请不要再考虑了。
npm
最好在使用Node项目时坚持使用它,浏览器也可以使用很少的项目...
凉亭
鲍尔现在是流行歌手。他们有很多项目在进行中,项目维护者喜欢在凉亭中保持最新状态。
可惜他有时有点马车。
沃洛
从那以后,我没有尝试过5分钟以上的volo,但是从我的角度看,它看起来比凉亭更灵活。
Volo的不利之处在于他们的项目已经过时了。
他们似乎正在解决相同的问题,但适用于不同的环境/世界。NPM用于nodejs和volo,用于浏览器的bower。
事实是,您还可以使用NPM来管理浏览器的javascript和CSS。没有什么可以阻止您这样做。从这个意义上讲,使用NPM对我而言比必须为同一目的管理两个不同的工具更为自然。
看来凉亭有更多可用的软件包,至少对于更流行的软件包而言。但是很快jQuery也将直接在NPM中可用,可能所有其他库都将遵循相同的趋势。
在我看来,因为有一样的工具browserify和webmake在那里,在浏览器的帮助使用节点模块,没有了一个真正的需要凉亭或VOLO,除非他们提供的东西别人为你(一个特定的模块只存在于他们的注册表)。
Volo和Bower两者也都很好,但是从我的角度来看,如果您已经在使用NPM,则最好坚持使用它。
请注意,即使不使用browserify或webmake,也可以使用NPM来管理客户端依赖性。在我正在从事的大多数项目中,安装npm模块后,我会运行脚本将其部署到客户端应用程序使用它们的位置。有时我会用grunt将该文件与其他js文件连接起来,有时我会直接从Web应用程序的模板文件中引用它。无论如何,这是个人喜好。其他人可能会发现Bower或Volo更易于使用,因为它们更自然地适合其工作流程。
Bower's big advantage over NPM is that its dependency management enforces using a single version of a component (whereas NPM works by having different copies/versions as subdependencies of different modules). This is A VERY GOOD THING because it prevents your client side javascript becoming bloated through needing to include multiple copies of a component at different versions. Including multiple copies of a module is central to how NPM's dependency management works, and NPM is therefore wholly unsuited to client side package management.
上面的结果是,bower软件包的维护者和消费者必须更加谨慎地维护其依赖版本号以避免冲突,但这是值得付出的代价。而且我发现NPM模块在发行主要版本,次要版本和修补程序版本时通常都很草率,因此NPM依赖性管理也不是一件容易的事。
I know this isn't in the scope of the question but there's another alternative also. Jam JS - http://jamjs.org/ One thing interesting is that it has grunt capabilities in jam:
jam compile output.js
有人应该再做一个包管理器并命名为:yapm :)
文章标签:bower , javascript , node.js , npm , volojs
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!