243 - 《Next.js x Turbopack》

发布于 2023年1月10日

上午带着两个问题看了下 Next.js 使用 Turbopack 的链路,都得到答案了,在此分享下。1)Next.js 是如何使用 Turbopack 的,2)如果 Umi 要用 Turbopack,应该如何做?

Next.js 如何使用 Turbopack

1、入口在 next.js/next-dev.ts at 9dedc94500cc059792abf5c71484b871140e6049 · vercel/next.js · GitHub

let bindings: any = await loadBindings();
bindings.turbo.startDev();

loadBinding 会先尝试加载 wasm 的版本,再加载 native 的版本。wasm 版本是给某些平台+设备的组合专用的,和 swc 有关,和 turbopack 无关,先忽略。然后会走到 loadNative 的逻辑。

2、loadNative 代码在 next.js/index.ts at efcec4c1e303848a5293cef6961be8f73fd5160b · vercel/next.js · GitHub

有两种加载方式,1)prebuilt binary,加载 @next/swc/native/next-swc.xxx.node,2)npm package,加载 @next/swc-xxx。两种都会尝试,先 1 再 2,我理解应该是方案的过渡期吧。

然后会返回 nativeBindings 对象,包含 transform、transformSync、turbo、mdx 等,其中 turbo 即 turbopack,他包含 startDev 方法。

let bindings;
// try prebuilt binary
bindings = require(`@next/swc/native/next-swc.${triple.platformArchABI}.no

内容预览已结束

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