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高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
Aug 14 Javascript
JavaScript中对循环语句的优化技巧深入探讨
Jun 06 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
Sep 16 Javascript
js实现获取两个日期之间所有日期的方法
Jun 17 Javascript
用Axios Element实现全局的请求loading的方法
Mar 15 Javascript
JS实现获取word文档内容并输出显示到html页面示例
Jun 23 Javascript
ES6入门教程之变量的解构赋值详解
Apr 13 Javascript
vue 路由子组件created和mounted不起作用的解决方法
Nov 05 Javascript
javascript实现弹出层效果
Dec 10 Javascript
Element DateTimePicker日期时间选择器的使用示例
Jul 27 Javascript
浅谈JavaScript中this的指向更改
Jul 28 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
Jan 30 Vue.js
解决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
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
一段批量给页面上的控件赋值js
2010/06/19 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
js动态引入的四种方法
2018/05/05 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
js实现批量删除功能
2020/08/27 Javascript
原生js实现购物车
2020/09/23 Javascript
Python获取服务器信息的最简单实现方法
2015/03/05 Python
Python正则表达式使用经典实例
2016/06/21 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
Python实现的knn算法示例
2018/06/14 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
selenium如何定位span元素的实现
2021/01/13 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
HTML5 新事件 小结
2009/07/16 HTML / CSS
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
软件工程专业推荐信
2013/10/28 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
运动会观后感
2015/06/09 职场文书
总经理年会致辞
2015/07/29 职场文书
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫