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 相关文章推荐
js函数获取html中className所在的内容并去除标签
Sep 08 Javascript
JQuery对表格进行操作的常用技巧总结
Apr 23 Javascript
jQuery操作JSON的CRUD用法实例
Feb 25 Javascript
js实现文本框选中的方法
May 26 Javascript
深入分析JSON编码格式提交表单数据
Jun 25 Javascript
js实现简单排列组合的方法
Jan 27 Javascript
JavaScript中的await/async的作用和用法
Oct 31 Javascript
JavaScript 数据类型详解
Mar 13 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
Apr 20 Javascript
详解async/await 异步应用的常用场景
May 13 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 jQuery
JavaScript基于面向对象实现的无缝滚动轮播示例
Jan 17 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
当海贼王变成JOJO风
2020/03/02 日漫
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
2016/05/24 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
vue移动端监听滚动条高度的实现方法
2018/09/03 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
jquery实现轮播图特效
2020/04/12 jQuery
讲解Python中运算符使用时的优先级
2015/05/14 Python
Django Highcharts制作图表
2016/08/27 Python
遗传算法python版
2018/03/19 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
python中字符串数组逆序排列方法总结
2019/06/23 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
Wallis官网:英国女装零售商
2020/01/21 全球购物
同步小康驻村工作简报
2015/07/20 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
python自动化测试之Selenium详解
2022/03/13 Python