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 相关文章推荐
jQuery中文入门指南,翻译加实例,jQuery的起点教程
Feb 09 Javascript
js前台分页显示后端JAVA数据响应
Mar 18 Javascript
键盘KeyCode值列表汇总
Nov 26 Javascript
js模拟C#中List的简单实例
Mar 06 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
Jun 24 Javascript
javascript实现节点(div)名称编辑
Dec 17 Javascript
三分钟带你玩转jQuery.noConflict()
Feb 15 Javascript
微信小程序 条件渲染详解
Oct 09 Javascript
详解javascript常用工具类的封装
Jan 30 Javascript
微信小程序new Date()方法失效问题解决方法
Jul 29 Javascript
解决vue动态下拉菜单 有数据未反应的问题
Aug 06 Javascript
吃通javascript正则表达式
Apr 21 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
我的论坛源代码(六)
2006/10/09 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
浅谈PHP的反射API
2017/02/26 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
js中的闭包学习心得
2018/02/06 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
详解element-ui中form验证杂记
2019/03/04 Javascript
IntelliJ IDEA编辑器配置vue高亮显示
2019/09/26 Javascript
在实例中重学JavaScript事件循环
2020/12/03 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
Python中使用不同编码读写txt文件详解
2015/05/28 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
项目申请汇报材料
2014/08/16 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
师德承诺书
2015/01/20 职场文书
消防安全主题班会
2015/08/12 职场文书
高一语文教学反思
2016/02/16 职场文书
Java实现多文件上传功能
2021/06/30 Java/Android
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server