如何编写一个webpack loader
0 点赞
0 条评论
2228 次浏览
发布于 2021-09-27 18:29
什么是loader
所谓 loader 只是一个导出为函数的 JavaScript 模块。这句话出自webpack的官方文档,那么现在我们可以知道其实loader就是一个函数,我们可以在这个函数里做一些事情。loader runner 会调用这个函数,然后把上一个 loader 产生的结果或者资源文件(resource file)传入进去。
// loaders/replace.js
module.exports = function (source) {
return source.replace('oldName', this.query.name);
};
1、loader对外暴露的函数,切记不能使用箭头函数。因为在这个函数里,我们会用到this指向,webpack在调用loader的时候,会把this做一些变更。变更之后才能用this里的一些方法,如果写成箭头函数,这里的this指向就会有问题,所以这里的function一定是声明式的function
2、参数source为我们引入文件的源代码
3、在这里拿到代码之后,就可以把代码做一个变更,然后再返回出去
4、可以通过this.query取到传递的options内的一些参数
在webpack.config.js中做loader的使用配置
const path = require('path');
module.exports = {
mode: 'development',
entry: {
main: './src/index.js'
},
module: {
rules: [{
test: /\.js/,
loader: path.join(__dirname, './loaders/replace.js'),
options: {
name: 'newName'// 传递给loader的参数
}
}]
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'dist')
}
};
使用loader-utils分析参数:
// loader-utils模块需要单独使用npm下载安装
const loaderUtils = require('loader-utils');
module.exports = function (source) {
// 使用loader-utils中的getOptions接收loader参数
const options = loaderUtils.getOptions(this);
return source.replace('oldName', options.name);
};
到这里,我们很轻松的就完成了一个自己的Loader。
"赞助我们,我们才能做的更多&更好"
赞助支持
还没有评论
写下你的评论...
最热文章
使用dart-sass替换node-sass
5192 浏览 · 0 评论
浏览器后退跳转到指定的页面
3867 浏览 · 0 评论
好玩的CSS3(3)-- 翻转(旋转正反两张)图片
3861 浏览 · 0 评论
Flutter适配夜间模式
3611 浏览 · 0 评论
pc端常用电脑屏幕分辨率尺寸适配
3572 浏览 · 0 评论
最新文章
js通过扫码枪快速录入的实现
407 浏览 · 0 评论
使用 WebSocket 实现你画我猜实时绘图
746 浏览 · 0 评论
基于code-server部署自己的云端vscode
2872 浏览 · 0 评论
支付宝动态收款码生成自定义金额及备注
2864 浏览 · 0 评论
使用 nohup 命令将程序挂载在后台执行
1960 浏览 · 0 评论
基于OpenLayers实现离线地图
2802 浏览 · 0 评论