C.W.K.
Stream
Lesson 02 of 13 · published

Node.js CI

~12 min · node, npm, pnpm

Level 0Apprentice
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

Runtime 골라, 버전 잠가

Node 는 활성 runtime 세 개: Node.js (클래식), Deno, Bun. 대부분 prod 앱은 아직 Node.js. 패키지 매니저: npm (기본), pnpm (빠름, content-addressed), yarn (아직 있음), bun (엄청 빠르고 runtime 도 됨).

Default Node CI 모양:

  1. Checkout.
  2. actions/setup-node@v4 + pinned version + 패키지 매니저 cache.
  3. npm ci (또는 pnpm install --frozen-lockfile, yarn install --immutable, bun install) — lockfile 에서 깨끗 재현 가능 install.
  4. Lint: eslintbiome.
  5. Type check: tsc --noEmit.
  6. Test: vitest run, jest, 또는 node --test.

흔한 함정

  • CI 에서 npm install 은 틀려 — lockfile 을 조용히 업데이트할 수 있어. npm ci 써.
  • actions/setup-node 의 기본 cache key 는 lockfile hash. Monorepo 에 lockfile 여러 개면 cache-dependency-path: 명시.
  • Matrix cell 마다 별도 npm install 돌리지 마 — 버전이 다르지 않으면 matrix 간에 install 공유.

Code

pnpm 으로 Node CI·yaml
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
        with: { version: 9 }
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: pnpm
      - run: pnpm install --frozen-lockfile
      - run: pnpm lint
      - run: pnpm tsc --noEmit
      - run: pnpm test --run
bun 으로 Node CI (속도 벤치마크)·yaml
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: oven-sh/setup-bun@v2
        with: { bun-version: latest }
      - run: bun install --frozen-lockfile
      - run: bun run lint
      - run: bun run test

External links

Exercise

Node 프로젝트에 cache 두 layer 로 CI 설정: actions/setup-node 기본 cache (lockfile 기반) + .next/dist/ build 출력 cache. Cold vs warm run 시간 재.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.