You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Rollup 是一款 ES Modules 打包器,从作用上来看,Rollup 与 Webpack 非常类似。不过相比于 Webpack,Rollup 要小巧的多
现在很多我们熟知的库都都使用它进行打包,比如:Vue、React和three.js等
举个例子:
// ./src/messages.jsexportdefault{hi: 'Hey Guys, I am zce~'}// ./src/logger.jsexportconstlog=msg=>{console.log('---------- INFO ----------')console.log(msg)console.log('--------------------------')}exportconsterror=msg=>{console.error('---------- ERROR ----------')console.error(msg)console.error('---------------------------')}// ./src/index.jsimport{log}from'./logger'importmessagesfrom'./messages'log(messages.hi)
一、模块化工具
模块化是一种处理复杂系统分解为更好的可管理模块的方式
可以用来分割,组织和打包应用。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体(
bundle
)在前端领域中,并非只有
webpack
这一款优秀的模块打包工具,还有其他类似的工具,例如Rollup
、Parcel
、snowpack
,以及最近风头无两的Vite
通过这些模块打包工具,能够提高我们的开发效率,减少开发成本
这里没有提及
gulp
、grunt
是因为它们只是定义为构建工具,不能类比Rollup
Rollup
是一款ES Modules
打包器,从作用上来看,Rollup
与Webpack
非常类似。不过相比于Webpack
,Rollup
要小巧的多现在很多我们熟知的库都都使用它进行打包,比如:
Vue
、React
和three.js
等举个例子:
然后通过
rollup
进行打包打包结果如下图
可以看到,代码非常简洁,完成不像
webpack
那样存在大量引导代码和模块函数并且
error
方法由于没有被使用,输出的结果中并无error
方法,可以看到,rollup
默认开始Tree-shaking
优化输出结果因此,可以看到
Rollup
的优点:但缺点也十分明显,加载其他类型的资源文件或者支持导入
CommonJS
模块,又或是编译ES
新特性,这些额外的需求Rollup
需要使用插件去完成综合来看,
rollup
并不适合开发应用使用,因为需要使用第三方模块,而目前第三方模块大多数使用CommonJs
方式导出成员,并且rollup
不支持HMR
,使开发效率降低但是在用于打包
JavaScript
库时,rollup
比webpack
更有优势,因为其打包出来的代码更小、更快,其存在的缺点可以忽略Parcel
Parcel ,是一款完全零配置的前端打包器,它提供了 “傻瓜式” 的使用体验,只需了解简单的命令,就能构建前端应用程序
Parcel
跟Webpack
一样都支持以任意类型文件作为打包入口,但建议使用HTML
文件作为入口,该HTML
文件像平时一样正常编写代码、引用资源。如下所示:main.js文件通过
ES Moudle
方法导入其他模块成员运行之后,使用命令打包
执行命令后,
Parcel
不仅打包了应用,同时也启动了一个开发服务器,跟webpack Dev Server
一样跟
webpack
类似,也支持模块热替换,但用法更简单同时,
Parcel
有个十分好用的功能:支持自动安装依赖,像webpack
开发阶段突然使用安装某个第三方依赖,必然会终止dev server
然后安装再启动。而Parcel
则免了这繁琐的工作流程同时,
Parcel
能够零配置加载其他类型的资源文件,无须像webpack
那样配置对应的loader
打包命令如下:
由于打包过程是多进程同时工作,构建速度会比
Webpack
快,输出文件也会被压缩,并且样式代码也会被单独提取到单个文件中可以感受到,
Parcel
给开发者一种很大的自由度,只管去实现业务代码,其他事情用Parcel
解决Snowpack
Snowpack,是一种闪电般快速的前端构建工具,专为现代
Web
设计,较复杂的打包工具(如Webpack
或Parcel
)的替代方案,利用JavaScript
的本机模块系统,避免不必要的工作并保持流畅的开发体验开发阶段,每次保存单个文件时,
Webpack
和Parcel
都需要重新构建和重新打包应用程序的整个bundle
。而Snowpack
为你的应用程序每个文件构建一次,就可以永久缓存,文件更改时,Snowpack
会重新构建该单个文件下图给出
webpack
与snowpack
打包区别:在重新构建每次变更时没有任何的时间浪费,只需要在浏览器中进行HMR更新
Vite
vite ,是一种新型前端构建工具,能够显著提升前端开发体验
它主要由两部分组成:
其作用类似
webpack
+webpack-dev-server
,其特点如下:vite
会直接启动开发服务器,不需要进行打包操作,也就意味着不需要分析模块的依赖、不需要编译,因此启动速度非常快利用现代浏览器支持
ES Module
的特性,当浏览器请求某个模块的时候,再根据需要对模块的内容进行编译,这种方式大大缩短了编译时间原理图如下所示:
在热模块
HMR
方面,当修改一个模块的时候,仅需让浏览器重新请求该模块即可,无须像webpack
那样需要把该模块的相关依赖模块全部编译一次,效率更高webpack
相比上述的模块化工具,
webpack
大而全,很多常用的功能做到开箱即用。有两大最核心的特点:一切皆模块和按需加载与其他构建工具相比,有如下优势:
参考文献
The text was updated successfully, but these errors were encountered: