284 - 《手写 Toy Bundler》
发布于 2023年4月6日
代码:
https://github.com/sorrycc/toy-bundler
基本思路是这样,
1、resolve config,解析用户配置,包括确定入口文件
2、build,生成模块依赖图谱
3、generate,根据依赖图谱生成代码
build 是以入口文件为起点构建依赖图谱。基本思路如下,从入口文件开始,做 load、parse、transform、analyze_deps 和 resolve,然后把依赖添加到队列里接着跑,直到分析完所有文件为止。
const seen = new Set();
const queue = [entryPoint];
while (queue.length) {
const module = queue.shift()!;
if (seen.has(module)) continue;
seen.add(module);
// 1、load
let content = load();
// 2、parse
let ast = parse(content);
// 3、transform
let { content } = transform(ast);
// 4、analyze
let { deps, exports, imports, ... } = analyze(ast, content);
// 5、resolve
let resolvedDepsMap = resolve(deps, mod