webpack基础(四)手写loader

2021-01-18  本文已影响0人  Viewwei
module.exports = function(source){
    // 把webpack替换成view
//source 代表匹配到文件内容,是字符串
    console.log("query:",this.query);
    // return source.replace("webpack","view")
    return source.replace(this.query.test,"view")
}
/**
 * 自定义loader其实是一个函数
 * 这个函数不能是一个箭头函数,这是因为它需要继承this,如果需要使用webpack的
 * 方法,那么需要使用webpack的this方法,比如this.version etc
 * 这个函数接收一个参数source,source代表匹配到文件的值,是一个字符串
*/
  1. 在webpack中加载loader
   {
                test:/\.js$/,
                use:[
                    {
                   
                        loader:path.resolve(__dirname,"./src/loaders/replace.js"),
                        options:{
                            test:"webpack" //loader传递的参数
                        }
                    },

                ]
            } 

在配置中loader的导入需要导入绝对路径,不然会显示导入失败。如果希望像第三方插件那样导入,那么需要配置resolveLoader 中的modules属性

  resolveLoader:{
        modules:["./node_modules","./src/loaders"] //这句话的意思是,loader首先从node_modules下面找,如果找不到在到./src/loadersloader下面找
    },

配置好了之后,把webpack修改为下面所示

 {
                test:/\.js$/,
          
                use:[
                    {
                        loader:"replace",
                        options:{
                            test:"webpack"
                        }
                    },
                ]
            } 

如果一个匹配项需要多个loader,那么需要添加创建多个loader。

module.exports = function (source) {
  //source
  //   console.log(this.query);
  //   ;
  const callback = this.async();
  setTimeout(() => {
    const result = source.replace("laohan", "阿西吧");
    callback(null, result);
  }, 3000);
  //   this.callback(null, result);
};

上一篇下一篇

猜你喜欢

热点阅读