我试图总结我对最流行的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
overnpm
+插件,则会有不同的含义。但是任务运行者绝对适合复杂任务(例如“在每个构建中创建捆绑包,从ES6移植到ES5,在所有浏览器模拟器上运行它,制作屏幕截图并通过ftp部署到保管箱”)。browserify
允许为浏览器打包节点模块。browserify
vsnode
'srequire
实际上是AMD vs CommonJS。
问题:
- 什么是
webpack
&webpack-dev-server
?官方文档说这是一个模块捆绑器,但对我来说只是一个任务运行器。有什么不同? - 您将在哪里使用
browserify
?我们不能对node / ES6导入做同样的事情吗? - 您何时会使用
gulp
/grunt
overnpm
+插件? - 当您需要组合使用时,请提供示例
Webpack
是捆绑器。就像Browserfy
在代码库中查找模块请求(require
或import
)并递归地解决它们。而且,您不仅可以配置Webpack
为解析类似于JavaScript的模块,而且还可以解析CSS,图像,HTML以及几乎所有内容。让我特别兴奋的是Webpack
,您可以在同一应用程序中组合编译模块和动态加载模块。因此,特别是通过HTTP / 1.x可以真正提高性能。我在此处的示例中描述了您如何精确地做到这一点http://dsheiko.com/weblog/state-of-javascript-modules-2017/ 作为捆绑器的替代者,您可以想到Rollup.js
(https://rollupjs.org/) ,可在编译期间优化代码,但会剥离所有找到的未使用的块。对于
AMD
,而不是RequireJS
可以与native一起使用ES2016 module system
,而是使用System.js
(https://github.com/systemjs/systemjs)加载此外,我要指出的是,
npm
它通常用作grunt
或的自动化工具gulp
。查看https://docs.npmjs.com/misc/scripts。我个人现在使用npm脚本只是避免使用其他自动化工具,尽管过去我非常喜欢grunt
。使用其他工具,您必须依靠无数的插件来编写软件包,而这些插件通常编写得不好并且没有得到积极维护。npm
知道它的软件包,因此您可以按以下名称调用本地安装的任何软件包:实际上,如果软件包支持CLI,则通常不需要任何插件。