|
| 1 | +# 🔥Webpack 插件开发如此简单! |
| 2 | + |
| 3 | + |
| 4 | + |
1 | 5 | > 本文使用的[**Webpack-Quickly-Starter**](https://github.com/pingan8787/Webpack-Quickly-Starter)快速搭建 Webpack4 本地学习环境。
|
2 | 6 | > 建议多阅读 Webpack 文档《[**Writing a Plugin**](https://webpack.js.org/contribute/writing-a-plugin/)》章节,学习开发简单插件。
|
3 | 7 |
|
|
6 | 10 |
|
7 | 11 | 完整代码存放在:[https://github.com/pingan8787/script-timestamp-webpack-plugin](https://github.com/pingan8787/script-timestamp-webpack-plugin)
|
8 | 12 |
|
9 |
| - |
| 13 | + |
10 | 14 |
|
11 | 15 | ## 一、背景介绍
|
12 | 16 | 本文灵感源自业务中的经验总结,**不怕神一样的产品,只怕一根筋的开发**。
|
|
27 | 31 | 1. 在模版文件中,添加 `script` 标签,执行获取 Webpack 自动添加的 `script` 标签并为其 `src` 值添加时间戳。但事实是还没等你修改完, js 文件已经加载完毕,所以放弃
|
28 | 32 | 1. 需要在 `index.html` 生成之前,修改 js 文件的路径,并添加时间戳。
|
29 | 33 |
|
30 |
| -于是我准备使用第三种方式,在 `index.html` 生成之前完成下面修改:<br /> |
| 34 | +于是我准备使用第三种方式,在 `index.html` 生成之前完成下面修改:<br /> |
31 | 35 |
|
32 | 36 | 问题简单,实际还是想试试开发 Webpack Plugin。
|
33 | 37 |
|
@@ -93,7 +97,7 @@ module.exports = {
|
93 | 97 | 本文开发的 **自动添加时间戳引用脚本文件(SetScriptTimestampPlugin)** 插件实现的原理:通过 **HtmlWebpackPlugin** 生成 HTML 文件前,将模版文件**预留位置替换成脚本**,脚本中执行自动添加时间戳来引用脚本文件。
|
94 | 98 |
|
95 | 99 | ### 3.1 插件运行机制
|
96 |
| - |
| 100 | + |
97 | 101 |
|
98 | 102 | ### 3.2 初始化插件文件
|
99 | 103 | 新建 `SetScriptTimestampPlugin.js` 文件,并参考官方文档中插件的基本结构,初始化插件代码:
|
@@ -151,7 +155,7 @@ module.exports = SetScriptTimestampPlugin;
|
151 | 155 | ### 3.4 添加插件替换入口
|
152 | 156 | 我们原理上是将模版文件中,指定替换入口,再替换成需要执行的脚本。
|
153 | 157 |
|
154 |
| - |
| 158 | + |
155 | 159 |
|
156 | 160 | 所以我们在模版文件 `template.html` 中添加 `<!--SetScriptTimestampPlugin inset script-->` 作为标识替换入口:
|
157 | 161 |
|
@@ -228,7 +232,7 @@ Sync:
|
228 | 232 |
|
229 | 233 | 在回调方法中,通过 `htmlPluginData.assets.js` 获取需要通过 `script` 引入的脚本文件名称列表,拷贝一份,并清空原有列表。
|
230 | 234 |
|
231 |
| - |
| 235 | + |
232 | 236 |
|
233 | 237 | 3. **编写替换逻辑。**
|
234 | 238 |
|
@@ -258,7 +262,7 @@ module.exports = {
|
258 | 262 | }
|
259 | 263 | ```
|
260 | 264 |
|
261 |
| -到这一步,我们已经实现需求“当项目托管到 CDN 平台,希望实现项目中的 index.js 不被缓存”。<br /> |
| 265 | +到这一步,我们已经实现需求“当项目托管到 CDN 平台,希望实现项目中的 index.js 不被缓存”。<br /> |
262 | 266 |
|
263 | 267 | ## 四、案例拓展
|
264 | 268 | 这里以之前 **SetScriptTimestampPlugin** 插件为例子,继续拓展。
|
@@ -345,7 +349,4 @@ module.exports = {
|
345 | 349 | |博 客|www.pingan8787.com|
|
346 | 350 | |微 信|pingan8787|
|
347 | 351 | |每日文章推荐|https://github.com/pingan8787/Leo_Reading/issues|
|
348 |
| -|ES小册|js.pingan8787.com| |
349 |
| - |
350 |
| -## 微信公众号 |
351 |
| - |
| 352 | +|ES小册|js.pingan8787.com| |
0 commit comments