如何编写一个Loader

本文介绍了如何编写一个简单的字符替换Loader,通过示例代码展示了Loader的实现过程,并讲解了如何在webpack配置文件中添加和使用多个Loader。重点在于理解Loader的工作原理和配置方式。
比如我现在实现一个简单地字符替换的Loader,该怎么做?

这是业务代码:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pVkrhUw5-1592838633564)(https://i.loli.net/2020/06/21/wVLN7SvMTUbaBAe.png)]

我要把Sun替换成别的字符:

  1. 为了方便使用,可以先下载个依赖

    npm install loader-utils --save-dev
    
  2. 在根目录下创建loaders文件夹,里边比如创建一个replaceLader.js做loader解析

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xTwWuTCB-1592838633568)(https://i.loli.net/2020/06/21/p2nxXeZoHO3AlPm.png)]

  3. 代码如下:

    const LoaderUtils = require('loader-utils')
    module.exports = function (source) {
        const options = LoaderUtils.getOptions(this)
        return source.replace('Sun', options.name)
    }
    
  4. 当然这样肯定是不行的,我们需要在webpack.config.js中进行配置

    const path = require('path')
    module.exports = {
    	mode: 'development',
    	entry: {
    		main: './src/index.js'
    	},
    	devServer: {
    		open: true,
    		hot: true,
    		port: 8888,
    		contentBase: './dist'
    	},
    	resolveLoader:{
    		modules:['node_modules','./loaders']
    	},
    	module: {
    		rules: [
    			{
    				test: /\.js/,
                    // 这块是我加载的lodaer文件
    				use: [
    					{
    						loader: 'replaceLoader',
    						options: {
    							name: 'Sun.sir'	// 我要替换的字符
    						}
    					}
    				],
    			}
    		]
    	},
    	output: {
    		path: path.resolve(__dirname, 'dist'),
    		filename: '[name].js'
    	}
    }
    
异步返回laoder,在replaceloader.js中这样写
const LoaderUtils = require('loader-utils')
module.exports = function (source) {
    const options = LoaderUtils.getOptions(this)
    const callback = this.async()	//关键,通过this.async()来异步返回解析的结果
    setTimeout(()=>{
        const result = source.replace('Sun', options.name)
        callback(null,result)
    },1000)
}
如果我有多个loader文件,该怎么做呢,在webpack.config.js中的rulse里在添加对应的loader文件就可以了
module: {
    rules: [
        {
            test: /\.js/,
            use: [
                {
                    loader: 'replaceLoader',
                    options: {
                        name: 'Sun.sir'
                    }
                },
                {
                    loader: 'replaceLoaderAsync',
                    options: {
                        name: '我是异步loader'
                    }
                }
            ],
        }
    ]
},

name: ‘我是异步loader’
}
}
],
}
]
},


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值