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 相关文章推荐
ASP.NET中基于JQUERY的高性能的TreeView补充
Feb 23 Javascript
js实现在文本框光标处添加字符的方法介绍
Nov 24 Javascript
表格单元格交错着色实现思路及代码
Apr 01 Javascript
动态加载jquery库的方法
Feb 12 Javascript
jQuery 无限级菜单的简单实例
Feb 21 Javascript
jquery拖拽排序简单实现方法(效果增强版)
Feb 16 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
May 27 Javascript
关于jquery form表单序列化的注意事项详解
Aug 01 jQuery
vue router使用query和params传参的使用和区别
Nov 13 Javascript
React SSR样式及SEO的实践
Oct 22 Javascript
Vue实现商品飞入购物车效果(电商项目)
Nov 26 Javascript
vue 组件销毁并重置的实现
Jan 13 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/03 新手入门
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
深入解析php模板技术原理【一】
2008/01/10 PHP
PHP通用检测函数集合
2011/02/08 PHP
PHP中如何使用Redis接管文件存储Session详解
2018/11/28 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
javascript eval函数深入认识
2009/02/21 Javascript
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
vue click.stop阻止点击事件继续传播的方法
2018/09/04 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
Windows下安装python2.7及科学计算套装
2015/03/05 Python
Python文件处理
2016/02/29 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
django+echart数据动态显示的例子
2019/08/12 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
软件测试英文面试题
2012/10/14 面试题
如何写一份好的英文求职信
2014/03/19 职场文书
打造高效课堂实施方案
2014/03/22 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
升学宴学生答谢词
2015/01/05 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书