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 相关文章推荐
来自国外的14个图片放大编辑的jQuery插件整理
Oct 20 Javascript
jqeury eval将字符串转换json的方法
Jan 20 Javascript
JS创建类和对象的两种不同方式
Aug 08 Javascript
js实例属性和原型属性示例详解
Nov 23 Javascript
简单封装js的dom查询实例代码
Jul 08 Javascript
javascript实现消灭星星小游戏简单版
Nov 15 Javascript
webpack项目调试以及独立打包配置文件的方法
Feb 28 Javascript
js+css实现打字效果
Jun 24 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
May 24 jQuery
Vue实现数据表格合并列rowspan效果
Nov 30 Javascript
JavaScript判断浏览器版本的方法
Nov 03 Javascript
node.js中 redis 的安装和基本操作示例
Feb 10 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
动手学习无线电
2021/03/10 无线电
js 判断 enter 事件
2009/02/12 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
2014/03/05 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
浅谈jquery高级方法描述与应用
2016/10/04 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
python集合是否可变总结
2019/06/20 Python
Python交互式图形编程的实现
2019/07/25 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
Python 读取WAV音频文件 画频谱的实例
2020/03/14 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
python小白学习包管理器pip安装
2020/06/09 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
Python自动巡检H3C交换机实现过程解析
2020/08/14 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
毕业生自荐信如何写
2014/03/24 职场文书
医院信息公开实施方案
2014/05/09 职场文书
高三毕业评语
2014/12/31 职场文书
初中教师个人总结
2015/02/10 职场文书
英语辞职信范文
2015/02/28 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书