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 陷阱 window全局对象
Nov 26 Javascript
javascript 子窗体父窗体相互传值方法
May 31 Javascript
jquery根据属性和index来查找属性值并操作
Jul 25 Javascript
jquery实现拖拽调整Div大小
Jan 30 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
Jul 22 Javascript
JavaScipt选取文档元素的方法(推荐)
Aug 05 Javascript
JavaScript正则获取地址栏中参数的方法
Mar 02 Javascript
AngularJS改变元素显示状态
Apr 20 Javascript
Node+Express+MongoDB实现登录注册功能实例
Apr 23 Javascript
记一次vue去除#问题处理经过小结
Jan 24 Javascript
vue cli3 配置proxy代理无效的解决
Oct 30 Javascript
关于Vue中$refs的探索浅析
Nov 05 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
php导出word格式数据的代码实例
2013/11/25 PHP
微信支付开发订单查询实例
2016/07/12 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
2020/05/29 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
JavaScript 学习初步 入门教程
2010/03/25 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
爬虫利器Puppeteer实战
2019/01/09 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
解决vue初始化项目时,一直卡在Project description上的问题
2019/10/31 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
Javascript confirm多种使用方法解析
2020/09/25 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
六行python代码的爱心曲线详解
2019/05/17 Python
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
工程师自我评价怎么写
2013/09/19 职场文书
店长助理岗位职责
2013/12/13 职场文书
高二英语教学反思
2014/01/19 职场文书
医药销售自荐书
2014/05/29 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
劳动模范获奖感言
2015/07/31 职场文书
nginx安装以及配置的详细过程记录
2021/09/15 Servers
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏
Spring 使用注解开发
2022/05/20 Java/Android