模块化管理工具和自动化构建工具是不同的。两者主要体现在侧重点不一样。自动化构建工具侧重于前端开发的 整个过程 的控制管理(像是流水线)。而模块化管理工具更侧重于模块打包,当然我们可以把开发中的所有资源(图片、js文件、css文件等)都可以看成模块。
webpack可以说是当前最流行的模块化管理工具和打包工具。其通过loader的转换,可以将任何形式的资源视作模块。它还可以将各个模块通过其依赖关系打包成符合生产环境部署的前端资源。它还可以将应用程序分解成可管理的代码块,可以按需加载。
打包原理:
解析各个模块的依赖关系 使用loader转换文件,使用plugin注入钩子,打包合并模块,最终生成bundle文件,使用express开启本地服务器, 浏览器请求的是bundle文件,也就是打包过后的文件。
优点:
等等
缺点:
1.各个模块之间的依赖关系过于复杂 会导致打包速度很慢
2.使用热更新时,改动一个模块,其他有依赖关系的模块也会重新进行打包
3.不支持打包出esm格式的代码 (打包后的代码再次被引用时tree shaking 困难), 打包后亢余代码较多。
和webpack差不离,vite是当下新兴的模块化管理工具和打包工具。它的本地启动速度相较于webpack快了很多,但是目前来说,vite还完全没有能够替换webpack的能力,不管是从社区还是从能力来讲,vite他本身还是太过脆弱,他的产生跟火热完全依赖于vue本身的热度。
打包原理:
使用koa开启本地服务器,没有webpack那样打包合并的过程,所以启动服务器很快,@vue/compiler-sfc会对模块进行编译 (修改一些引入文件的路径 css编译成js字符串)浏览器再请求编译好的模块。
缺点:
1.项目的开发浏览器要支持esmodule
2.不能识别commonjs语法
3.生态不及webpack,加载器、插件不够丰富
4.生产环境esbuild构建对于css和代码分割不够友好
5.没被大规模重度使用,会隐藏一些问题
Rollup 是一个模块打包工具, 可以将我们按照 ESM (ES2015 Module) 规范编写的源码构建输出如下格式:
<script>
标签加载RequireJS
加载Webpack
加载Webpack
, Rollup
加载优点:
cjs
, umd
头外,bundle 代码基本和源码差不多,也没有奇怪的 __webpack_require__
, Object.defineProperty
之类的东西,缺点:
适用场景:
由纯js开发的第三方库; 需要生成单一的umd文件的场景
比较(和webpack):
使用:
https://www.cnblogs.com/tugenhua0707/p/8179686.html
Gulp 是基于“流”的前端自动化构建工具,采用代码优于配置的策略,更易于学习和使用,它让简单的任务简单,复杂的任务可管理。
它是基于Nodejs,自动化地完成 javascript、coffee、sass、less、html/image、css 等文件的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。
优点:
缺点:
适用场景:
静态资源密集操作型场景,主要用于css、图片等静态资源的处理操作。
比较(和grunt):
使用:
Grunt 是一套前端自动化工具,帮助处理反复重复的任务。一般用于:编译,压缩,合并文件,简单语法检查等
特点:
CoffeeScript
,Handlebars
,Jade
,JsHint
,Less
,RequireJS
,Sass
,Styles
。而且通过参考文档进行配置便可以使用。使用: