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

内容预览已结束

此内容需要会员权限。请先登录以查看完整内容。