编写一个webpack loader,loader的作用是获取你写的源代码,根据自己的操作对源代码的字符进行自定义的处理,相当于解释器、翻译器.

1、在入口文件(webpack.config.js中的entry配置的js文件)中写如下代码

console.log('hello,vue');

2、接下来编写一个loader,将console.log中的vue替换成react,项目根目录下新建loaders文件夹,新建customLoader.js文件,内容如下

module.exports = function (source) {
    return source.replace(this.query.name, 'react')    //这个this.query是webpack配置的loader option中的变量,这里是vue;source指的是源代码.
}

3、项目根目录下新建webpack.config.js

const path = require('path')
module.exports = {
    mode: 'development',
    entry: {
        main: './src/index.js'
    },
    resolveLoader: {
        modules: ['node_modules', 'loaders']   //指的是在node_modules、loaders中查找loader,loaders是自己配置的,可以自行修改
    },
    module: {
        rules: [
            {
                test: /\.js/,
                use: [
                    {
                        // loader: path.resolve(__dirname, './loaders/customLoader.js'),   //没使用resolveLoader就需要使用path路径
                        loader: 'customLoader',
                        options: {
                            name: 'vue'   
                        }
                    }
                ]
            }
        ]
    },
    output: {
        filename: '[name].[contenthash].js',
        path: path.resolve(__dirname, 'dist')
    }
}

4、打包,修改成功

扩展:如果想要在loader中使用异步操作,需要使用async

4-1、customLoader.js 配置如下

module.exports = function (source) {
    const callback = this.async();   //返回一个this.callback
    setTimeout(() => {
        let result = source.replace(this.query.name, 'react');
        callback(null,result)   //第一个参数是报错信息,第二个是处理后的源码
    }, 5000);
}

  

posted on 2020-12-07 16:47  随心的博客  阅读(142)  评论(0编辑  收藏  举报