webpack手写loader -----babel-loader

//这个插件可以获取传入option 
let loaderUtils = require("loader-utils");
//babel/core 有transform可以转代码成为ast抽象语法树
let babel = require("@babel/core");
function loader(source) {
    //source是文件的内容
    let cb = this.async();//添加异步
    //获取options传入进来的参数
    let options = loaderUtils.getOptions(this);
    //将代码转成为ast
    babel.transform(source,{
        ...options,
        sourceMap:true,
        filename:this.resourcePath.split('/').pop()
    },function(err,r){
        //有时候读取文件可能十异步,所以调用cb等于调用this.callback
        cb(err,r.code,r.map); // 这里需要处理一下source-map
    });
}

module.exports = loader;
发布了80 篇原创文章 · 获赞 5 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_28473733/article/details/95483620