你如何比较 npm、 bower和 volo?
npm
bower
volo
所有这三个都可以用来为 UI 项目安装 JavaScript 依赖项。 我知道 npm更多是针对节点的。
什么时候用?
npm仍然很遥远,但是 bower和 volo似乎正在解决完全相同的问题,尽管我不能在 npm和 bower-volo之间画一条线。
bower-volo
它在前端开发人员中仍然非常流行,尽管它只有很少的特性。每个前端包都在使用它。还有一个 主动将鲍尔并入 npm。
Bower 针对客户端进行了优化,仅支持平面依赖树,即 每个库只能使用一次(因为将同一库的不同版本发送到客户端的开销很大) ,并且依赖约束必须由用户解决。
您可以期望在 bower 注册表(bower search <some keyword>)中找到任何与前端相关的内容——在我看来,这是 bower 相对于其他包管理器的最大优势。
bower search <some keyword>
我已经很多年没有用过它超过5分钟了。不知道它,而是在我看来它确实包括一些构建工具,这是非常熟悉的 Grunt 用户。
是的,npm 表示节点包管理器。但是现在您可以将它用于任何事情; 人们不再仅仅是 npm install0事情,并且期望他们在 Node 环境中工作 只有。例如,有许多 用于 Bootstrap 的 npm 软件包。
npm install
Npm 针对服务器端使用进行了优化,并使用了嵌套的依赖关系树。每个依赖项都可以有自己的依赖项,这些依赖项也可以有自己的依赖项,依此类推。这消除了依赖项版本冲突,因为每个依赖项都可以使用它们自己的版本,例如 Underscore。然而,即将到来的 Npm 版本3将展平依赖树:
使用 npm@3,node _ module 目录将更加平整。所有的依赖项和大部分的子依赖项(以及(子) + 依赖项)将在顶层并排放置。只有在存在冲突时,才会在更深的级别上安装模块。这对 Windows 用户来说应该会容易得多。
我看到了使用 npm 的一些优点:
Npm 是 JavaScript 的包管理器。
截至2013年2月,我的意见如下
当您使用 Node 项目时,最好坚持使用它,浏览器也可以使用的项目非常少..。
鲍尔现在是流行歌手。他们有很多项目在他们的引擎盖下,并且项目维护人员喜欢保持他们在鲍尔注册表的最新..。
真可惜他有时候有点毛病。
从那以后,我还没有试过 Volo 超过5分钟,但是从我看来它似乎比 Bower 更灵活。
Volo 的一个缺点是他们的项目太过时了。
最能描述 npm 和 Bower 之间区别的描述是: npm 管理称为包的 JavaScript 模块,Bower 管理称为组件的前端组件(即 css、 html 和 JavaScript)。Npm 还用于安装 Bower。这是一个 关于 NPM 和 Bower 的文章(不包括伏罗) ,它进入了大量的细节。
他们似乎在解决同一个问题,只是环境/世界不同。用于 nodejs 和 volo 的 NPM,用于浏览器的 bower。
事实上,您也可以使用 NPM 来管理浏览器的 javascript 和 css。没有什么能阻止你这么做。从这个意义上说,使用 NPM 对我来说比为同一目的管理两个不同的工具更自然。
看起来鲍尔有更多的软件包可供选择,至少对于那些更受欢迎的软件包来说是这样的。但是很快 JQuery 也可以直接在 NPM 中使用和其他所有的图书馆可能会跟随同样的趋势。
在我看来,既然有像 译自: 美国《科学》杂志网站(http://rowserify.org/)和 Http://github.com/medikoo/module-webmake”> webmake 这样的工具,可以帮助在浏览器中使用节点模块,那么就不再真正需要 鲍尔或 Volo了,除非他们为你提供其他的东西(一个特定的模块只存在于他们的注册表中)。
沃洛和 鲍尔都很好,但是从我的观点来看,如果您已经在使用 NPM,那么最好坚持使用它。
请注意 即使不使用 Browserify 或 webmake,您也可以使用 NPM 来管理客户端依赖性。在我正在进行的大多数项目中,在安装 npm 模块之后,我运行一个脚本将它们部署到客户机应用程序使用它们的位置。有时我使用 grunt 将该文件与其他 js 文件连接起来,有时我直接从 Web 应用程序的模板文件中引用它。无论如何,这是个人偏好。其他人可能会发现,鲍尔或 Volo 更容易使用,因为它们更适合自己的工作流程。
我知道这不在问题的范围内,但还有另一个选择。Jam JS-http://jamjs.org/一件有趣的事情是,它在果酱中具有咕噜声功能:
jam compile output.js
应该有人创建另一个包管理器,并将其命名为: yapm:)
与 NPM 相比,Bower 的最大优势在于其依赖管理强制使用组件的单一版本(而 NPM 的工作方式是将不同的副本/版本作为不同模块的子依赖项)。这就是 非常好,因为它需要在不同版本中包含组件的多个副本,从而防止客户端 javascript 变得臃肿。包含一个模块的多个副本是 NPM 依赖管理工作的核心,因此 NPM 完全不适合客户端包管理。
上面的一个结果是,bower 包维护者和使用者必须更加注意维护他们的依赖版本号,以避免冲突,但这是一个值得付出的代价。我发现 NPM 模块在发布主要的、次要的和补丁的版本时经常是草率的,所以 NPM 依赖管理也不是一帆风顺的。