Webpack的Loader和Plugin的区别


Posted in Javascript onNovember 09, 2020

Loader

用于对模块源码的转换,loader描述了webpack如何处理非javascript模块,并且在buld中引入这些依赖。loader可以将文件从不同的语言(如TypeScript)转换为JavaScript,或者将内联图像转换为data URL。比如说:CSS-Loader,Style-Loader等。

loader的使用很简单:

在webpack.config.js中指定loader。module.rules可以指定多个loader,对项目中的各个loader有个全局概览。

loader是运行在NodeJS中,可以用options对象进行配置。plugin可以为loader带来更多特性。loader可以进行压缩,打包,语言翻译等等。

loader从模板路径解析,npm install node_modules。也可以自定义loader,命名XXX-loader。

语言类的处理器loader:CoffeeScript,TypeScript,ESNext(Bable),Sass,Less,Stylus。任何开发技术栈都可以使用webpack。

Plugin

目的在于解决loader无法实现的其他事,从打包优化和压缩,到重新定义环境变量,功能强大到可以用来处理各种各样的任务。webpack提供了很多开箱即用的插件:CommonChunkPlugin主要用于提取第三方库和公共模块,避免首屏加载的bundle文件,或者按需加载的bundle文件体积过大,导致加载时间过长,是一把优化的利器。而在多页面应用中,更是能够为每个页面间的应用程序共享代码创建bundle。

webpack功能强大,难点在于它的配置文件,webpack4默认不需要配置文件,可以通过mode选项为webpack指定了一些默认的配置,mode分为:development/production,默认是production。

插件可以携带参数,所以在plugins属性传入new实例。

【Mode】可以在config文件里面配置,也可以在CLI参数中配置:webpack --mode=production(一般会选择在CLI,也就是npm scripts里面进行配置)。

在webpack4以下版本,webpack3.XX,通过plugins进行环境变量的配置。

【resolve】模块,resolver是个库,帮助webpack找到bundle需要引入的模块代码,打包时,webpack使用enhanced-resolve来解析路径。

resolve: {
 extensions: ['.js', '.vue', '.json'],
 alias: { 'vue$': 'vue/dist/vue.esm.js', '@': resolve('src'),
 }
 }

 【Manifest】管理所有模块之间的交互。runtime将能够查询模块标识符,检索出背后对应的模块。

问题1:webpack通过使用bundle计算content hash作为文件名称,文件修改,新的content hash执向新的文件,缓存无效,但是文件内容没有修改,计算的hash还是会改变,因为,runtime和manifest的注入在每次构建都会发生变化。要想解决这个文件可以了解更多的runtime和manifest。

webpack原理:从配置文件定义的模块列表开始,处理应用程序,从入口文件开始递归构建一个依赖图,然后将所有模块打包为少量的bundle,通常只有一个,可由浏览器加载。

到此这篇关于Webpack的Loader和Plugin的区别的文章就介绍到这了,更多相关Webpack Loader和Plugin内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
在JavaScript中,为什么要尽可能使用局部变量?
Apr 06 Javascript
Javascript 颜色渐变效果的实现代码
Oct 01 Javascript
jquery改变tr背景色的示例代码
Dec 28 Javascript
如何将网页表格内容导入excel
Feb 18 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
Jan 07 Javascript
jQuery使用Layer弹出层插件闪退问题
Dec 22 Javascript
完美实现js焦点轮播效果(一)
Mar 07 Javascript
微信小程序封装http访问网络库实例代码
May 24 Javascript
微信小程序tabbar不显示解决办法
Jun 08 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
Nov 08 Javascript
Node.js模块全局安装路径配置方法
May 17 Javascript
Angularjs之ngModel中的值验证绑定方法
Sep 13 Javascript
解决vue初始化项目一直停在downloading template的问题
Nov 09 #Javascript
在VUE中使用lodash的debounce和throttle操作
Nov 09 #Javascript
解决vue init webpack 下载依赖卡住不动的问题
Nov 09 #Javascript
详解nginx配置vue h5 history去除#号
Nov 09 #Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
Nov 09 #Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
Nov 09 #Javascript
详解Vue中的watch和computed
Nov 09 #Javascript
You might like
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
php探针不显示内存解决方法
2019/09/17 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
js 概率计算(简单版)
2017/09/12 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
Python中isnumeric()方法的使用简介
2015/05/19 Python
详解Python中的四种队列
2018/05/21 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
python实现爬山算法的思路详解
2019/04/09 Python
django rest framework vue 实现用户登录详解
2019/07/29 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
意大利男装网店:Vrients
2019/05/02 全球购物
幼儿运动会邀请函
2014/01/17 职场文书
人事部经理岗位职责
2014/03/07 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
男方家长婚礼致辞
2015/07/27 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android