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 相关文章推荐
node.js中的querystring.escape方法使用说明
Dec 10 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
Sep 20 Javascript
angular ngClick阻止冒泡使用默认行为的方法
Nov 03 Javascript
javascript设置文本框光标的方法实例小结
Nov 04 Javascript
Node.js学习入门
Jan 03 Javascript
jquery实现下拉框左右选择功能
Feb 21 Javascript
js实现带进度条提示的多视频上传功能
Dec 13 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
Sep 30 Javascript
微信web端后退强制刷新功能的实现代码
Mar 04 Javascript
vue项目中应用ueditor自定义上传按钮功能
Apr 27 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
Sep 06 Javascript
vue3不同环境下实现配置代理
May 25 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
PHP导出带样式的Excel示例代码
2016/08/28 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
vue使用drag与drop实现拖拽的示例代码
2017/09/07 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
用实例解释Python中的继承和多态的概念
2015/04/27 Python
python 字典修改键(key)的几种方法
2018/08/10 Python
python http基本验证方法
2018/12/26 Python
python设置环境变量的作用和实例
2019/07/09 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
java字符串格式化输出实例讲解
2021/01/06 Python
教育孩子心得体会
2014/01/01 职场文书
英语感恩演讲稿
2014/01/14 职场文书
大学军训感想
2014/02/12 职场文书
学校校庆演讲稿
2014/05/22 职场文书
幼儿园运动会口号
2014/06/07 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
给老师的保证书怎么写
2015/05/09 职场文书
导游词之湖北梁子湖
2019/11/07 职场文书