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 网页黑白效果实现代码(兼容IE/FF等)
Apr 23 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
Feb 21 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
Jul 27 Javascript
Bootstrap实现弹性搜索框
Jul 11 Javascript
angular bootstrap timepicker TypeError提示怎么办
Jun 13 Javascript
vuejs父子组件之间数据交互详解
Aug 09 Javascript
Vue项目中使用Vux的安装过程
May 01 Javascript
使用webpack搭建react开发环境的方法
May 15 Javascript
JS闭包经典实例详解
Dec 20 Javascript
Vue中使用canvas方法总结
Feb 12 Javascript
Vuex mutitons和actions初使用详解
Mar 04 Javascript
浅谈TypeScript 索引签名的理解
Oct 16 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简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
vue数据初始化initState的实例详解
2019/04/11 Javascript
Vue项目打包编译优化方案
2020/09/16 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
go和python调用其它程序并得到程序输出
2014/02/10 Python
Python实现Const详解
2015/01/27 Python
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
OpenCV 轮廓检测的实现方法
2019/07/03 Python
Python Django 页面上展示固定的页码数实现代码
2019/08/21 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
python speech模块的使用方法
2020/09/09 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
餐饮收银员岗位职责
2014/02/07 职场文书
乌鸦喝水教学反思
2014/02/07 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
暑期教师培训方案
2014/06/07 职场文书
岗位说明书标准范本
2014/07/30 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python