Skip to content

프로젝트 간 전환

Volta의 주요 장점 중 하나는 서로 다른 프로젝트에서 서로 다른 도구 버전을 원활하게 처리한다는 것입니다. 이 페이지는 프로젝트 간에 이동할 때 Volta가 JavaScript 환경을 자동으로 관리하는 방법을 설명합니다.

자동 버전 전환

도구 버전 간에 수동으로 전환해야 하는 다른 버전 관리자와 달리 Volta는 현재 디렉토리에 따라 자동으로 이를 처리합니다.

작동 방식

  1. JavaScript 명령(node, npm 또는 패키지 바이너리 등)을 실행하면 Volta의 심이 명령을 가로챕니다
  2. Volta는 현재 디렉토리를 확인하여 고정된 도구 버전이 있는 프로젝트에 있는지 확인합니다
  3. 있다면 Volta는 해당 프로젝트의 package.json에 있는 고정된 버전을 사용합니다
  4. 고정된 버전이 있는 프로젝트에 있지 않다면 Volta는 기본 도구를 사용합니다

이 모든 과정은 추가 명령 없이 투명하게 발생합니다.

예제 워크플로우

서로 다른 Node.js 요구사항을 가진 두 개의 프로젝트가 있다고 상상해보세요:

프로젝트 A (~/projects/project-a/package.json):

json
{
  "volta": {
    "node": "14.19.1",
    "npm": "6.14.16"
  }
}

프로젝트 B (~/projects/project-b/package.json):

json
{
  "volta": {
    "node": "16.14.2",
    "npm": "8.5.0"
  }
}

워크플로우는 다음과 같을 수 있습니다:

bash
# 프로젝트 A에서
cd ~/projects/project-a
node --version  # v14.19.1 표시
npm --version   # v6.14.16 표시

# 프로젝트 B로 전환
cd ~/projects/project-b
node --version  # 자동으로 v16.14.2 표시
npm --version   # 자동으로 v8.5.0 표시

# 어떤 프로젝트 외부에서
cd ~
node --version  # 기본 Node 버전 표시

중첩된 프로젝트

중첩된 프로젝트가 있는 경우 Volta는 volta 섹션이 있는 가장 가까운 package.json의 도구 버전을 사용합니다.

예를 들어:

/parent-project/package.json (volta 섹션 있음, node@14)
/parent-project/child-project/package.json (volta 섹션 있음, node@16)
/parent-project/other-directory/ (package.json 없음)

다음 위치에서 명령을 실행하면:

  • /parent-project/child-project/ - Volta는 Node.js 16 사용
  • /parent-project/other-directory/ - Volta는 Node.js 14 사용
  • /parent-project/ - Volta는 Node.js 14 사용

패키지 바이너리

Volta의 자동 전환은 패키지 바이너리에도 적용됩니다. 예를 들어 프로젝트별 TypeScript 버전이 있고 tsc를 실행하면 Volta가 올바른 버전을 사용하도록 보장합니다.

글로벌 vs. 로컬 패키지

패키지 바이너리를 실행할 때:

  1. 바이너리가 프로젝트의 node_modules/.bin/에 있으면 Volta는 해당 버전을 사용합니다
  2. 없지만 패키지가 Volta를 통해 글로벌하게 설치된 경우 해당 버전을 사용합니다
  3. 그렇지 않으면 명령을 찾을 수 없다는 오류를 표시합니다

문제 해결

버전 전환에 문제가 있는 경우:

  • 프로젝트의 package.jsonvolta 섹션이 있는지 확인
  • volta list all을 실행하여 설치된 도구를 확인
  • 필요한 도구가 프로젝트에 고정되어 있거나 기본 버전으로 설치되어 있는지 확인
  • volta which node를 실행하여 Volta가 사용 중인 Node.js 버전과 그 이유를 확인