plugin和loader

简介: plugin和loader

plugin

一、Plugin 的作用

通过插件我们可以扩展 webpack,加入自定义的构建行为,使 webpack 可以执行更广泛的任务,拥有更强的构建能力。

二、Plugin 工作原理

webpack 就像一条生产线,要经过一系列处理流程后才能将源文件转换成输出结果。 这条生产线上的每个处理流程的职责都是单一的,多个流程之间有存在依赖关系,只有完成当前处理后才能交给下一个流程去处理。插件就像是一个插入到生产线中的一个功能,在特定的时机对生产线上的资源做处理。webpack 通过 Tapable 来组织这条复杂的生产线。 webpack 在运行过程中会广播事件,插件只需要监听它所关心的事件,就能加入到这条生产线中,去改变生产线的运作。webpack 的事件流机制保证了插件的有序性,使得整个系统扩展性很好。——「深入浅出 Webpack」

站在代码逻辑的角度就是:webpack 在编译代码过程中,会触发一系列 Tapable 钩子事件,插件所做的,就是找到相应的钩子,往上面挂上自己的任务,也就是注册事件,这样,当 webpack 构建的时候,插件注册的事件就会随着钩子的触发而执行了。

三、常见plugin

  • clean-webpack-plugin:打包前自动清理 dist 目录,防止文件残留。
  • copy-webpack-plugin:将单个文件或者整个目录复制到构建目录
  • mini-css-extract-plugin:将 CSS 抽离出来单独打包并且通过配置可以设置是否压缩
  • html-webpack-plugin:这个插件可以配置生成一个 HTML5 文件,其中 script 标签包含所有 Webpack 包。如果你设置多个入口点,你可以据此实现多页面应用打包。

提高效率的 plugin:

  • webpack-dashboard:可以更友好的展示相关打包信息。
  • webpack-merge:提取公共配置,减少重复配置代码
  • speed-measure-webpack-plugin:简称 SMP,分析出 Webpack 打包过程中 Loader 和 Plugin 的耗时,有助于找到构建过程中的性能瓶颈。
  • size-plugin:监控资源体积变化,尽早发现问题
  • HotModuleReplacementPlugin:模块热替换

loader

一、常见loader:

  1. 文件处理的loader
    • file-loader:当引入的文件是 .png.txt 等时,可以通过 file-loader 解析项目中的 url 引入。根据配置将文件拷贝到相应的路径,并修改打包后文件的引入路径,让它指向正确的文件。
    • url-loaderurl-loader 封装了 file-loader 且可以不依赖于 file-loader 单独使用,并且可以配置 limit。对小于 limit 大小的图片转换成 Base64,大于 limit 的时候使用 file-loader 里的方法。
  2. 语法检查的loader
    • tslint-loader:通过 TSLint 检查 TypeScript 代码
    • eslint-loader:通过 ESLint 检查 JavaScript 代码
  3. css处理loader
    • style-loader:动态创建 style 标签,将 CSS 代码插入到 head 中。
    • css-loader:负责处理 @importurl 等语句。例如 import css from 'file.css'url(image.png)
    • postcss-loader:负责进一步处理 CSS 文件,比如添加浏览器前缀,压缩 CSS 等
    • less-loader:将 .less 文件内容转换成 CSS。
    • sass-loader:将 .sass 文件内容转换成 CSS。
  4. JS 代码处理常见的 loader
    • babel-loader:将 JS 代码向低版本转换,我们需要使用 babel-loader
    • ts-loader:将 TypeScript 转换成 JavaScript

plugin和loader的区别

Loader 本质就是一个函数,在该函数中对接收到的内容进行转换,返回转换后的结果。
因为 Webpack 只认识 JavaScript,所以 Loader 就成了翻译官,对其他类型的资源进行转译的预处理工作。

Plugin 就是插件,基于事件流框架 Tapable,插件可以扩展 Webpack 的功能,在 Webpack 运行的生命周期中会广播出许多事件,Plugin 可以监听这些事件,在合适的时机通过 Webpack 提供的 API 改变输出结果。

Loader 在 module.rules 中配置,作为模块的解析规则,类型为数组。每一项都是一个 Object,内部包含了 test(类型文件)、loader、options (参数)等属性。

Plugin 在 plugins 中单独配置,类型为数组,每一项是一个 Plugin 的实例,参数都通过构造函数传入。

目录
相关文章
|
JSON 前端开发 JavaScript
浅谈一下 webpack 以及 loader 和 plugin
浅谈一下 webpack 以及 loader 和 plugin
173 0
|
19天前
|
前端开发 JavaScript
Webpack 常用 Loader 和 Plugin
【10月更文挑战第12天】Webpack 是一个强大的模块打包工具,能够将各种资源模块进行打包和处理。Loader 用于转换模块的源代码,如 `babel-loader` 将 ES6+ 代码转换为 ES5,`css-loader` 处理 CSS 文件等。Plugin 扩展 Webpack 功能,如 `HtmlWebpackPlugin` 自动生成 HTML 文件,`UglifyJsPlugin` 压缩 JavaScript 代码。通过合理配置和使用 Loader 和 Plugin,可以构建高效、优化的项目。
17 2
|
3月前
|
JSON 前端开发 算法
vite打包优化vite-plugin-compression的使用
【8月更文挑战第4天】vite打包优化vite-plugin-compression的使用
405 4
|
5月前
|
资源调度
蓝易云 - Error: PostCSS plugin autoprefixer requires PostCSS 8问题解决办法
以上步骤应该可以解决"PostCSS plugin autoprefixer requires PostCSS 8"的问题。如果问题仍然存在,你可能需要检查你的项目配置,确保没有其他的冲突或问题。
189 0
|
6月前
|
前端开发 JavaScript
Webpack中的Loader和Plugin:理解与使用
Webpack中的Loader和Plugin:理解与使用
|
6月前
|
前端开发 JavaScript
常见loader
常见loader:
66 0
|
6月前
|
移动开发 监控 前端开发
常见plugin
常见plugin
72 0
|
前端开发 开发者
loader - 配置处理 less 文件的 loader| 学习笔记
快速学习 loader - 配置处理 less 文件的 loader
loader - 配置处理 less 文件的 loader| 学习笔记
|
前端开发 开发者
loader - 配置处理 scss 文件的 loader|学习笔记
快速学习 loader - 配置处理 scss 文件的 loader
loader - 配置处理 scss 文件的 loader|学习笔记
why is the configuration.js being loaded?
why is the configuration.js being loaded?
why is the configuration.js being loaded?