Skip to content

Stage 1 — Build & Tooling

Triết lý cốt lõi: Không chỉ "dùng tool", mà hiểu "tại sao chọn tool này".
Stage này là "cái búa" — bạn phải biết cầm búa đúng cách trước khi đóng đinh.

Phase: UNLEARN (Stage 1.1–1.3) → BRIDGE (Stage 1.4)
Teaching Model: 60% Teaching / 40% Questioning
Deliverable: 1 monorepo pnpm (2 packages), 1 app bundle bằng Vite từ đầu (không dùng template), 1 PR workflow demo với rebase/merge/cherry-pick, CI chạy lint + test trên GitHub Actions + 1 Decision Record: "Chọn bundler cho team 5 người".

Mục tiêu

Hiểu công cụ biên dịch và quản lý code trước khi viết app lớn. Mỗi module có Decision Record mẫu để tập quen với việc "decide trước khi code".

  • Unlearn → Rebuild: Không dùng tool theo mặc định, mà hiểu trade-off giữa Webpack/Vite/Rspack, npm/yarn/pnpm, rebase/merge.
  • Bridge: Bắt đầu chịu trách nhiệm decision — thiết kế repo cho team, chọn bundler có lý do.
  • Staff Lens: Mỗi module có DR mẫu. 2 options đều khả thi, trade-off đau.

Tại sao Stage 1 tồn tại

  • Bối cảnh thực tế: 90% lỗi "không hiểu sao import không work" hoặc "bundle toàn 2MB" đều xuất phát từ không hiểu bundler, module resolution, hoặc lockfile.
  • Hậu quả nếu bỏ qua: Bạn sẽ mất 3 ngày debug "module not found" trong monorepo mà không hiểu workspace: protocol; hoặc deploy production mà quên source map; hoặc chọn tool vì "nó nhanh hơn" mà không biết trade-off.
  • Output của Stage 1: Tự cấu hình được build tool từ zero, tự resolve lockfile conflict, tự quyết định rebase hay merge trong team, viết được DR có 2 options đều khả thi.

Danh sách module

Bundler & Build

ModuleNội dungMức độPhaseStatus
1.1.1 Bundler FundamentalsWebpack vs Vite vs Rspack, HMR, ESM vs CJS, Source MapFoundationUNLEARN
1.1.2 Bundle Analysis & OptimizationTree-shaking, Code splitting, Bundle analysis, MinificationApplicationUNLEARN

Package Manager & Monorepo

ModuleNội dungMức độPhaseStatus
1.2.1 Package Manager & Lockfilenpm vs yarn vs pnpm, Lockfile, Peer dependencies, enginesFoundationUNLEARN
1.2.2 Monorepo & Publishingpnpm workspaces, changesets, Semantic Versioning, Dependency confusionApplicationUNLEARN

Git Workflow

ModuleNội dungMức độPhaseStatus
1.3.1 Git Workflow & HistoryRebase vs Merge, Interactive rebase, Cherry-pick, Branch strategyFoundationUNLEARN
1.3.2 Git Advanced & Recoverygit reflog, git bisect, Conventional Commits, Sparse checkoutApplicationUNLEARN

Architecture Decision

ModuleNội dungMức độPhaseStatus
1.4.1 Monorepo Architecture DecisionStaff thiết kế repo cho team. Turborepo, Remote caching, Decision Record mẫuApplicationBRIDGE

Stage 1 Staff Checkpoint

Tự đánh giá trước khi sang Stage 2. Nếu trả lời "Không" ở bất kỳ câu nào, quay lại module tương ứng.

#Câu hỏiModule
1Tôi có giải thích được tại sao chọn Vite thay Webpack không? (không phải "vì nhanh hơn")1.1.1
2Tôi có phân tích được bundle size impact không? (tree-shaking thực sự hoạt động thế nào)1.1.2
3Tôi có thiết kế được monorepo cho 2 packages không? (dependency graph, task pipeline)1.2.2
4Tôi có viết được 1 Decision Record không? ("Chọn bundler cho team 5 người, 2 options đều khả thi")1.4.1
5Tôi có tính cost impact của bundle size trên CDN không?1.1.2
6Tôi có resolve được lockfile conflict mà không xoá node_modules không?1.2.1
7Tôi có publish được package lên npm đúng semver không?1.2.2
8Tôi có giải thích được khi nào rebase, khi nào merge không?1.3.1
9Tôi có cứu được commit mất bằng reflog không?1.3.2

Nguyên tắc vàng

  • Không dùng create-react-app hay Next.js template mà không hiểu config bên trong. Nếu không giải thích được tại sao sideEffects: false giúp tree-shaking, chưa sang Stage 2.
  • Mỗi checkbox trong checklist là một kiến thức bạn PHẢI giải thích được cho người khác. Nếu không giải thích được, chưa hiểu sâu — quay lại học.
  • Decision Record là bắt buộc: Mỗi lần chọn tool, phải viết DR có ít nhất 2 options đều khả thi, với trade-off rõ ràng. Không viết "vì nó nhanh hơn".