프로젝트 간 전환
Volta의 주요 장점 중 하나는 서로 다른 프로젝트에서 서로 다른 도구 버전을 원활하게 처리한다는 것입니다. 이 페이지는 프로젝트 간에 이동할 때 Volta가 JavaScript 환경을 자동으로 관리하는 방법을 설명합니다.
자동 버전 전환
도구 버전 간에 수동으로 전환해야 하는 다른 버전 관리자와 달리 Volta는 현재 디렉토리에 따라 자동으로 이를 처리합니다.
작동 방식
- JavaScript 명령(
node
,npm
또는 패키지 바이너리 등)을 실행하면 Volta의 심이 명령을 가로챕니다 - Volta는 현재 디렉토리를 확인하여 고정된 도구 버전이 있는 프로젝트에 있는지 확인합니다
- 있다면 Volta는 해당 프로젝트의
package.json
에 있는 고정된 버전을 사용합니다 - 고정된 버전이 있는 프로젝트에 있지 않다면 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. 로컬 패키지
패키지 바이너리를 실행할 때:
- 바이너리가 프로젝트의
node_modules/.bin/
에 있으면 Volta는 해당 버전을 사용합니다 - 없지만 패키지가 Volta를 통해 글로벌하게 설치된 경우 해당 버전을 사용합니다
- 그렇지 않으면 명령을 찾을 수 없다는 오류를 표시합니다
문제 해결
버전 전환에 문제가 있는 경우:
- 프로젝트의
package.json
에volta
섹션이 있는지 확인 volta list all
을 실행하여 설치된 도구를 확인- 필요한 도구가 프로젝트에 고정되어 있거나 기본 버전으로 설치되어 있는지 확인
volta which node
를 실행하여 Volta가 사용 중인 Node.js 버전과 그 이유를 확인