概述
插件向第三方开发者提供了 webpack 引擎中完整的能力。本文将分两部分,第一部分介绍下插件编写的基本要求及基础 demo,第二部分介绍一个实际的插件开发过程。对于webpack的插件机制建另一篇博文webpack插件机制。
详述
最简插件
最低要求,定义一个具名函数,原型提供一个 apply 方法:
1 | class DemoPlugin { |
使用:
1 | // webpack.config.js |
基本结构
- 一个具名 JavaScript 函数。
- 在它的原型上定义 apply 方法。
- 指定一个触及到 webpack 本身的 事件钩子。
- 操作 webpack 内部的实例特定数据。
- 在实现功能后调用 webpack 提供的 callback。
1 | // 一个 JavaScript class |
实战一个压缩资源为 zip 的插件
知识准备
通过 Compilation 进行文件写入
Compilation 上的 assets 可以用于文件写入,可以将 zip 资源包设置到 compilation.assets 对象上,文件写入需要使用 webpack-sources。
1 | const { RawSource } = require('webpack-sources'); |
Node.js 里面将文件压缩为 zip 包
使用jszip
1 | var zip = new JSZip(); |
环境搭建
一个基础的 webpack 环境即可,目录示例如下:
1 | // package.json |
具体编写
安装具体 node 包及配置 scripts:
1 | // package.json |
ZipPlugin
插件编写:
1 | // zip-plugin.js |
ZipPlugin
插件使用:
1 | const path = require('path'); |
ZipPlugin
测试:
1 | npm run build |
参考
https://webpack.docschina.org/contribute/writing-a-plugin/
https://webpack.docschina.org/api/compiler-hooks/#emit
https://webpack.docschina.org/api/plugins/#%E6%8F%92%E4%BB%B6%E7%B1%BB%E5%9E%8B-plugin-types-
《极客时间》