编写一个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); }