티스토리 뷰

pnpm

npm 의 설치속도를 개선하기 위해 yarn 을 도입했지만, yarn 또한, 마찬가지로 의존성 설치하는데 비슷한 현상이 발생하기 시작했습니다.
패키지 매니저 변경이 필요했는데, pnpm 이 눈에 띄웠고 캐싱된 의존성을 보기 때문에 로컬에 설치한 의존성이 있다면, 로컬 환경에 더 빠르게 설치가 가능해집니다. 그래서 pnpm 을 도입해보았습니다.

설치

우선 pnpm 을 사용하기 위해서는 pnpm 을 설치해줍시다.
별다른 노드 관리자를 쓰지 않으면 아래와 같이 pnpm 을 설치하면 됩니다.

npm install -g pnpm

gtihub action 에 deploy.yml 만들기

상용에 배포시에는 devDependencies 가 포함되지 않도록 pnpm install --frozen-lockfile --prod 명령어로 의존성을 설치해줍니다.

name: pnpm-deploy

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
  workflow_dispatch:
    inputs:
      targetStage:
        description: "배포 환경"
        type: choice
        default: main
        required: true
        options: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - name: Checkout source code
        uses: actions/checkout@v4

      - name: Setup node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20.17.0"

      - name: Install pnpm
        run: npm install -g pnpm

      - uses: actions/cache@v4
        id: cache
        with:
          path: |
            node_modules
            .pnpm-store
          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-store-

      - name: Install dependencies
        run: pnpm install --frozen-lockfile --prod

      - name: Build
        run: pnpm build

Dockerfile 만들기

node 20 을 베이스로 아래와 같이 셋팅해줍니다.

# Node.js 20을 베이스 이미지로 사용
FROM node:20-alpine as runner

# 작업 디렉토리 설정
WORKDIR /app

# 필요한 환경 변수 설정
ENV NODE_ENV production
ENV PNPM_HOME /pnpm
ENV PATH $PNPM_HOME:$PATH

# pnpm 설치
RUN apk add --no-cache libc6-compat
RUN wget -qO /bin/pnpm "https://github.com/pnpm/pnpm/releases/latest/download/pnpm-linuxstatic-x64" && chmod +x /bin/pnpm

# package.json과 pnpm-lock.yaml 파일 복사
COPY package.json pnpm-lock.yaml ./

# 의존성 설치 (production only)
RUN pnpm install --frozen-lockfile --prod

# 빌드된 파일들과 필요한 모든 파일 복사
COPY public ./public

# 애플리케이션 포트 설정
ENV HOST 0.0.0.0
EXPOSE 3000

# 애플리케이션 실행
CMD ["pnpm", "start"]
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함