Gom monorepo build vào một Node.js runtime

Workflow phổ biến trong monorepo Node.js là dùng yarn workspaces foreach (hoặc lerna run, npm script lặp qua package) để chạy build trên từng sub-package. Mỗi lần chạy như vậy spawn một process Node.js mới và khởi tạo lại runtime — load V8, init module system, parse package.json, resolve dependencies. Chi phí khởi tạo cố định (~80-300ms cold, ~30-100ms warm) cộng dồn nhanh khi monorepo có hàng chục package. Một build tool tối ưu hơn gộp toàn bộ pipeline vào một process Node duy nhất, gọi bundler (Rollup, esbuild) qua API thay vì CLI.

Phép tính chi phí

Một monorepo 30 package, build tuần tự bằng yarn foreach:

Với single-runtime tool, chi phí cố định chỉ phát sinh một lần — phần còn lại là build thực sự. Khi build mỗi package mất ~500ms-2s, tax startup chiếm 10-30% tổng thời gian, đáng để loại bỏ.

Cách triển khai

teko-kit là một ví dụ cụ thể: thay vì exec rollup CLI cho mỗi package, nó import rollup programmatically và gọi rollup.rollup(options) trong cùng process. Mỗi Package instance giữ một PackageBuilder riêng (cấu hình Rollup khác nhau), nhưng tất cả chia sẻ một event loop.

class PackageBuilder {
  async build() {
    const builder = await rollup.rollup(this.options);
    await Promise.all(outputOptions.map(builder.write));
    await builder.close();
  }
}

Các tool monorepo trưởng thành áp dụng cùng triết lý: Nx có “Nx CLI daemon” giữ process sống và serve build request; Turborepo có một process gốc đọc cache và spawn child worker khi cần; Rush dùng plugin-based runner trong cùng process.

Đánh đổi cần biết

Một runtime chung không phải lúc nào cũng hơn:

Khi nào nên đi hướng này

Trải nghiệm cá nhân

teko-kit (viết tại Teko, 5/2025) được tạo chính vì lý do này — yarn foreach trên monorepo của Teko Web chạm trần thời gian build chấp nhận được trên CI. Single-runtime cộng với dependency-aware orchestration (xem Điều phối build qua dependency graph) là hai cải tiến chính. README repo ghi rõ “Single Node.js process eliminates the overhead of spawning multiple runtimes” là động lực thiết kế đầu tiên.

Cập nhật: 2026-05-29