webpack 自定义loader

本文介绍了如何在webpack配置中使用自定义loader,通过修改main.js文件,并配置webpack.config.js,利用./loader/lll-js-replace-loader.js进行处理。最终成功生成bundle.js,实现了预期效果。

main.js 文件

function A() {
    console.log('hello world');
}

webpack.config.js 文件

const path = require('path'); 

module.exports = {
    entry: path.join(__dirname, './main.js'), 
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js' 
    },
    mode: "development",    

    
    resolveLoader: {
        modules: ['./node_modules', './loader']
    },
    //上述配置的意思是当需要使用Loader的时候,
    //先去./node_modules里寻找,找不到就到./loader目录里去找
    //这样我们就可以在下面的rules配置部分直接写loader文件名即可

    module: {
        rules: [ //这里用来写需要文件转换或者识别而采用的loader
            {

            }            
        ]
    },
};


./loader/lll-js-replace-loader.js 自定义的loader文件

//Webpack的官方文档推荐的是通过loader-utils这个库来获取配置文件中传入的配置项
const loaderUtils = require('loader-utils');

module.exports =  function (source) {
    let options = loaderUtils.getOptions(this); //获取配置文件传来的参数

    let resource = source.replace(/world/g,options.name); 
    //将要转换的文件中的所有world单词都替换成options.name,即配置文件传来的name参数值

    //this.callback可以接受四个参数,分别是错误信息,处理后的结果,sourceMap,和一些额外信息
    //这里最后可以写this.callback()函数也可以写return 来返回处理后的结果
    this.callback(null,resource);
}

让我们再回到webpack.config.js 文件中来,配置我们自定义的 loader

module: {
        rules: [
            {
                test: /\.js$/,
                use: {
                    loader: 'lll-js-replace-loader',
                    options: {  
                        //传递过来的配置项 name,
                        //也就是说把要转换的文件中的所有world单词都转换为javascript
                        name: 'javascript'
                    }
                },
                exclude: /node_modules/
            }
        ]
    },

执行:

接着我们去看看生成的bundle.js文件输出的结果吧

成功实现!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值