KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA

模块与构建 — keel 龙骨

课程导读 · 每一条结论都要能在自己的 Node 上跑出同一个报错

课程导读 · 每一条结论都要能在自己的 Node 上跑出同一个报错

章节目录

  1. 01 · 一个文件,两套加载规范 — 这一章回答:同一个 .js 文件,Node 会按哪套规范加载它?为什么两个方向相反的报错,连"什么时候抛"都不一样?
  2. 02 · 导出的是接线还是快照 — 这一章回答:import 进来的是一个值,还是一条通向那块内存的接线?循环依赖为什么在一边是抛错、在另一边是静默的 undefined?
  3. 03 · 一行 import 落到磁盘上哪个文件 — 这一章回答:from "fakepkg/sub/deep" 这行字,是怎么变成磁盘上某一个具体文件的?为什么一个包加了 exports 字段之后,老代码突然全报 ERR_PACKAGE_PATH_NOT_EXPORTED?
  4. 04 · 两套规范相遇时的形状 — 这一章回答:ESM 去 import 一个 CJS 包,default 到底是什么?import { named } 里的 named 是真有的还是猜出来的?反过来 require 一个 ESM 又会怎样?
  5. 05 · 双格式发布的账单 — 这一章回答:一个库同时发布 ESM 和 CJS 两份,为什么消费者会同时拿到两份?「同一个类」的 instanceof 为什么会返回 false?
  6. 06 · 打包器能看见什么 — 这一章回答:打包器凭什么判断「这段代码没人用」?为什么你删了两千行,产物一个字节没瘦?
  7. 07 · 三套解析器,三个答案 — 这一章回答:同一行 import,为什么 Node 说找不到、打包器说没问题、tsc 说你要写扩展名——以及"编译通过"和"运行时找得到"之间到底隔着什么。

进入 keel 阅读