在nitro项目中,nitro build 主要用于生产环境打包,将项目源代码转化为经过优化的、可用于生产的输出,默认会在 .output 目录输出构建后的文件。

参考nitro dev 的执行流程,nitro build 的源文件位于https://github.com/nitrojs/nitro/blob/4b29402c/src/cli/commands/build.ts, 其核心run内容如下:

javascript 复制代码
async run({ args }) {
    const rootDir = resolve((args.dir || args._dir || ".") as string);
    const nitro = await createNitro(
      {
        rootDir,
        dev: false,
        minify: args.minify,
        preset: args.preset,
      },
      {
        compatibilityDate: args.compatibilityDate as DateString,
      }
    );
    await prepare(nitro);
    await copyPublicAssets(nitro);
    await prerender(nitro);
    await build(nitro);
    await nitro.close();
},

执行流程

  1. 解析项目根目录
  2. 创建 Nitro Instance
  3. 初始化构建环境,主要是扫描handles/routes/hooks/plugins等。
  4. 静态文件处理
  5. 根据routes配置生成静态html
  6. 根据不同的平台生成优化后的代码
  7. 清理和释放资源。

具体构建工作流

复制代码
Nitro Build Process:  
1. createNitro() → prepare()  
2. prepare() → copyPublicAssets()  
3. copyPublicAssets() → rollup bundling  
4. rollup bundling → writeTypes()  
5. writeTypes() → prerender() (optional)  
6. prerender() → Output Files

Rollup 还是 Rolldown

await build(nitro) 中,我们可以看到,在当前阶段,nitro 同时支持rolluprolldown

javascript 复制代码
export async function build(nitro: Nitro) {
  switch (nitro.options.builder) {
    case "rollup": {
      const { rollupBuild } = await import("./rollup/build");
      return rollupBuild(nitro);
    }
    case "rolldown": {
      const { rolldownBuild } = await import("./rolldown/build");
      return rolldownBuild(nitro);
    }
    default: {
      throw new Error(`Unknown builder: ${nitro.options.builder}`);
    }
  }
}

Output Structure

执行完毕,通常输出的文件及目录如下:

复制代码
.output/  
├── server/         # Server-side code  
│   ├── index.mjs   # Entry point  
│   ├── chunks/     # Code chunks  
├── public/         # Static assets  
├── nitro.json      # Build information