webpack 的 Loader 和 Plugin 的区别,常见的 loader 和 plugin 有哪些?

结论先行:

1、 Loader 和 Plugin 的区别

Loader 也叫做就是"加载器",因为 webpack 原生只能解析 js 文件,而对于其他类型文件,则需要借助 loader。所以 loader 的作用就是实现对不同格式文件的解析和处理,例如把 ES6 转换成 ES5,TypeScript 转换为 JavaScript等,使其能够添加到依赖关系中。
Plugin 就是我们常说的"插件"。主要是扩展 webpack 的功能,增加额外的构建任务。例如打包优化、环境变量注入、优化构建速度等,它们会运行在 webpack 的不同阶段(钩子 / 生命周期),贯穿了 webpack 整个编译周期。

2、 常见的 loader 和 plugin 有哪些?

常见的 loader:

css-loader:处理 CSS 文件,使其能够在 JavaScript 模块中使用。

加载 CSS,支持模块化、压缩、文件导入等特性;

style-loader :将解析后的 css, 用 style 标签挂载到页面的 head 标签中;

babel-loader:把 ES6+ 转换成 ES5;

file-loader:将文件复制到输出目录,在代码中通过相对路径去引用输出的文件 (处理图片和字体);

url-loader:与 file-loader 类似,区别是用户可以设置一个阈值,大于阈值会交给 file-loader处理,小于阈值时以 base64 的⽅式把⽂件内容注⼊到代码中去(处理图片和字体);

eslint-loader:通过 ESLint 检查 JavaScript 代码;

image-loader:加载并且压缩图片文件;

常见的 plugin:

html-webpack-plugin :生成 HTML 文件,并自动将打包生成的 JS、CSS 文件注入到 HTML 文件中。

mini-css-extract-plugin :分离样式文件,将 CSS 提取到单独的⽂件中,⽀持按需加载

(替代extract-text-webpack-plugin);

terser-webpack-plugin : 支持压缩 ES6 代码(Webpack4);

webpack-bundle-analyzer :可视化 webpack 输出文件的体积;

webpack-parallel-uglify-plugin: 多进程执行代码压缩,提升构建速度

clean-webpack-plugin: 在每次构建前清理输出目录,避免旧文件残留。

uglifyjs-webpack-plugin:压缩 JavaScript 代码,减小文件体积 (Webpack4 以前);

optimize-css-plugin:压缩 CSS;

define-plugin:定义环境变量;

允许在编译时创建配置的全局对象; (Webpack4 之后指定 mode 会自动配置)

是一个 webpack 内置的插件,不需要安装

copy-webpack-plugin:将静态文件复制到输出目录。

如 Vue 的打包过程中,如果我们将一些文件放到 public 的目录下,那么这个目录会被复制到 dist 文件夹中

具体解析:

1、Loader

Webpack 中 loader 的作用是什么?常用 loader 有哪些?-CSDN博客

Loader 直译为"加载器"。

Webpack 将一切文件视为模块,但是 Webpack 原生是只能解析 js 文件,如果想将其他文件也打包的话,就会用到 loader

所以 loader 的作用是让 webpack 拥有了加载和解析非 JavaScript 文件的能力。

2、Plugin

Webpack 中 Plugin 的作用是什么?常用 plugin 有哪些?-CSDN博客

Plugin 直译为"插件"。

Plugin 可以扩展 webpack 的功能,让 webpack 具有更多的灵活性。

在 Webpack 运行的生命周期中会广播出许多事件,Plugin 可以监听这些事件,在合适的时机通过 Webpack 提供的 API 改变输出结果。

3、不同的用法:

Loader 在 module.rules 中配置,也就是说他作为模块的解析规则而存在。

每个配置项包含了一个或多个规则对象,规定了哪些文件需要经过哪些 loader 进行处理。

类型为数组,每一项都是一个 Object,里面描述了对于什么类型的文件(test),使用什么加载 (loader) 和使用的参数(options

Pluginplugins 中单独配置。

类型为数组,每一项是一个 plugin 的实例,参数都通过构造函数传入。

4、总结

总结起来,loader 用于处理模块的转换工作,而 plugin 则用于扩展 webpack 的功能,增加额外的构建任务。

它们在 webpack 的配置文件中通过不同的配置项进行配置和使用。

相关推荐
庸俗今天不摸鱼10 分钟前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
黄毛火烧雪下17 分钟前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
Apifox27 分钟前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员
一张假钞30 分钟前
Firefox默认在新标签页打开收藏栏链接
前端·firefox
高达可以过山车不行30 分钟前
Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
前端·firefox
m0_5937581031 分钟前
firefox 136.0.4版本离线安装MarkDown插件
前端·firefox
掘金一周34 分钟前
金石焕新程 >> 瓜分万元现金大奖征文活动即将回归 | 掘金一周 4.3
前端·人工智能·后端
三翼鸟数字化技术团队1 小时前
Vue自定义指令最佳实践教程
前端·vue.js
Jasmin Tin Wei1 小时前
蓝桥杯 web 学海无涯(axios、ecahrts)版本二
前端·蓝桥杯
Misnearch1 小时前
node.js版本管理
node.js