webpack分析及处理
may-pack.js
#! /usr/bin/env node
// node环境
console.log('start');
let path = require('path')
// 拿到配置文件webpack.config.js
let config = require(path.resolve('webpack.config.js'));
let Compiler = require('../lib/Compiler.js');
let compiler = new Compiler(config);
// 标识运行编译
compiler.run()
创建lib
文件Compiler.js
let path = require('path')
let fs = require('fs')
class Compiler {
constructor(config) {
// entry output
this.config = config
// 需要保存入口文件的路径
this.entryId = ''; // './src/index.js'
// 需要保存所有的模块依赖
this.modules = {};
this.entry = config.entry // 入口文件
// 工作目录
this.root = process.cwd(); // 当前运行npx的路径
}
// 构建模块
buildModule(modulePath, isEntry) {
}
// 发射文件
emitFile() {
// 用数据 渲染想要的
}
run() {
// 执行 创建模块的依赖关系
this.buildModule(path.resolve(this.root, this.entry), true) // path.resolve(this.root, this.entry) 得到入口文件的绝对路径
// 发射打包后的文件
this.emitFile()
}
}
module.exports = Compiler
主要两个任务
- 拿到入口Id
- 解析模块,也就是实现
buildModule
方法