实现loader
zf-pack.js
let fs = require('fs');
let path = require('path');
let babylon = require('babylon');
let traverse = require('@babel/traverse').default;
let t = require('@babel/types');
let generator = require('@babel/generator').default;
let ejs = require('ejs');
// babylon 主要就是把源码转换成ast
// @babel/traverse
// @babel/types
// @babel/generator
class Compiler {
constructor(config) {
// entry output
this.config = config;
// 需要保存入口文件的路径
this.entryId;
// 需要保存所有得到依赖模块
this.modules = {
};
this.entry = config.entry;
// 工作路径
this.root = process.cwd();
}
// 解析源码
parse(source, parentPath) {
// AST解析语法树
let ast = babylon.parse(source);
// console.log(ast);
let dependencies = []; // 依赖的数组
traverse(ast, {
CallExpression(p) {
let node = p.node; // 对应的节点
if (node.callee.name =