用了这么久 webpack 一直想简单的记录以下这篇博客来讲解如何手写自己所需的 webpack loader 和 plugin,说人话就是自定义 webpack 的加载器与插件,其实官方文档也有详细的记录,大家可直接查看官方文档都 ok 的
https://webpack.docschina.org/contribute/
loader
一、loader 是什么,有什么用
- 是 webpack 用于在编译过程中解析各类文件格式,并输出;
- 本质上就是一个 node 模块,通过写一个函数来完成自动化的过程;
- 由此我们就可以在开发模式下,通过解析各类前端无法解析的文件格式,然后将其解析后返回为对象或字符串供前端开发时使用,在 webpack 的编译过程中自动会将我们前端项目中引用的文件格式对应到指定 loader 解析后输出。
二、怎么写一个自定义 loader
接下来我将写一个非常简单的 loader 来解析 txt 文件,它将满足以下功能
- 读取 txt 文件内容并输出为一个对象,对象内包括文件内容与文件名
- 读取 webpack loader 选项,将内容中的 [name] 替换为我们选项 name 的值
// webpack.config.js
module.exports = {
//...
module: {
rules: [
{
test: /\.txt$/,
use: {
loader: path.resolve(__dirname, './txt-loader.js'),
options: {
name: 'YOLO'
}
}
}
]
}
}
// txt-loader.js
var utils = require('loader-utils')
module.exports = function (source) {
const options = utils.getOptions(this)
source = source.replace(/\[name\]/g, options.name)
return `export default ${
JSON.