最佳答案
我试图总结我对最流行的JavaScript包管理器、捆绑器和任务运行器的了解。如果我错了,请纠正我:
npm
和bower
是包管理器。他们只是下载依赖,不知道如何自己构建项目。他们知道的是在获取所有依赖后调用webpack
/gulp
/grunt
。bower
类似于npm
,但构建了一个扁平化的依赖树(不像npm
递归地构建)。这意味着npm
获取每个依赖项的依赖项(可能会多次获取相同的依赖项),而bower
希望你手动包含子依赖项。有时bower
和npm
分别用于前端和后端(因为每个兆字节在前端可能都很重要)。grunt
和gulp
是任务运行器,用于自动化所有可以自动化的东西(即编译CSS/Sass、优化图像、制作捆绑包并缩小/转译它)。grunt
vs.gulp
(就像maven
vs.gradle
或配置vs.代码)。Grunt基于配置单独的独立任务,每个任务打开/处理/关闭文件。Gulp需要更少的代码并且基于Node流,这允许它构建管道链(不重新打开相同的文件)并使其更快。 webpack
(webpack-dev-server
)-对我来说,它是一个具有热重载更改的任务运行器,可以让您忘记所有JS/CSS观察者。 npm
/bower
+插件可能会取代任务运行器。他们的能力通常是交叉的,所以如果你需要使用gulp
/grunt
而不是npm
+插件,会有不同的含义。但是任务运行器绝对更适合复杂的任务(例如“在每个构建中创建捆绑包,从ES6转换到ES5,在所有浏览器模拟器上运行它,制作屏幕截图并通过ftp部署到dropbox”)。browserify
允许为浏览器打包节点模块。browserify
vsnode
的require
实际上是AMD vs Common JS。提问:
gulp
/grunt
而不是npm
+插件?