작가: 로사리오 데 키아라✏️
mise와 asdf는 개발자가 여러 버전의 프로그래밍 언어와 환경을 관리하는 데 도움을 주기 위해 설계된 도구입니다. 두 도구 모두 다양한 프로그래밍 언어 및 프레임워크로 작업할 때 흔히 발생하는 문제인 도구 버전 간 관리 및 전환을 더 쉽게 만들어 다중 언어 개발을 단순화하는 것을 목표로 합니다.
asdf는 'shimming'이라는 기술을 사용하여 Python, Node.js, Ruby와 같은 도구의 다양한 버전 간에 전환하는 인기 있는 버전 관리자입니다. 특정 버전에 대한 임시 경로를 생성하고 올바른 버전의 도구가 다른 프로젝트에서 사용되도록 환경을 수정합니다. 그러나 이 방법은 심의 작동 방식으로 인해 성능 오버헤드를 초래할 수 있습니다.
테이블을 준비하는 방법인 프랑스어 미장플라스(mise-en-place)의 줄임말인 미제(mise)는 심(shim)에 대한 의존도를 없애 asdf의 발전을 추구합니다.
Rust로 작성된 mise는 PATH 환경 변수를 직접 수정하여 실행 시간을 단축합니다. asdf 플러그인과 원활하게 작동하도록 설계되었지만 명령의 퍼지 일치 및 동일한 도구의 여러 버전을 동시에 설치하는 기능과 같은 기능을 제공합니다.
asdf를 설치하려면 시작 가이드에 따라 시스템에 따라 필수 구성 요소를 설치하세요. 환경이 준비되면 홈 디렉터리의 공식 저장소를 git clone할 수 있습니다.
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
위 명령은 설치를 완료하는 데 필요한 모든 스크립트와 구성 파일을 .asdf 디렉터리에 복제합니다.
위 설치 가이드의 다음 단계는 설치 스크립트를 실행하는 것입니다. 다시 한번 말씀드리지만, 이 단계는 환경 및 운영 체제의 세부 사항에 따라 달라지므로 가이드에 따라 셸 초기화 스크립트(예: .bashrc, .bash_profile 등)에 적절한 스크립트 호출을 추가하세요. 이 프로세스가 끝나면 일반적으로 셸을 다시 시작한 후 asdf를 다음 명령으로 실행할 수 있습니다.
이 시점에서 asdf가 실행 중이지만 이를 유용하게 사용하려면 개발하려는 프로젝트(예: Node.js, 파이썬 등).
이를 위해 Node.js용 플러그인을 설치합니다. asdf에서 플러그인은 프레임워크나 라이브러리의 다양한 버전을 저글링할 수 있게 해주는 코드 조각입니다. 이 경우에는 Node.js 플러그인을 설치한 다음 몇 가지 Node.js 버전을 설치하여 asdf가 이를 처리하는 방법을 이해하겠습니다.
다음 코드를 사용하여 Node.js 플러그인을 설치하겠습니다.
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
플러그인 소스 코드가 포함된 git 저장소를 명시적으로 지정해야 한다는 점에 유의하세요. 플러그인이 설치되면 이를 사용하여 다음 명령을 사용하여 특정 버전의 Node.js를 설치할 수 있습니다.
$ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
이 예에서는 이 글을 쓰는 시점의 최신 버전인 23.1.0을 설치합니다. 다음 명령을 사용하여 특정 버전의 Node.js를 설치합니다.
$ asdf install nodejs latest
시스템에서 두 가지를 모두 사용할 수 있는지 확인하려면 다음을 사용하세요.
$ asdf install nodejs 20.0.0
사용할 Node.js 버전을 선택하려면 다음 명령을 사용하세요.
$ asdf shim-versions node nodejs 20.0.0 nodejs 23.1.0
asdf는 [.tool-versions](https://asdf-vm.com/manage/configuration.html#tool-versions)라는 파일을 다음 형식으로 채워 다양한 버전의 도구를 처리합니다.
$ asdf global nodejs 20.0.0 $ node --version v20.0.0 $ asdf global nodejs 23.1.0 $ node --version v23.1.0
위의 Node.js 버전 20.0.0에서 했던 것처럼, .tool-versions 파일은 사용할 특정 버전을 지정하는 명령을 사용하여 asdf에 의해 자동으로 조작됩니다. 매개변수 전역, 셸 및 로컬에 따라 도구 버전을 특정 .tool-versions 파일에 추가하여 사용자 환경에 다양한 영향을 미칩니다. 다음은 Node.js 버전 20.0.0을 설치할 경우 매개변수의 영향에 대한 설명입니다.
ruby 2.5.3 nodejs 10.15.0
첫 번째 명령으로 asdf에게 홈 디렉터리에서 버전 20.0.0을 사용하도록 지시하고 node --version으로 버전을 확인합니다. 그런 다음 test라는 디렉터리를 만듭니다. 테스트에서는 Node에 대해 다른 버전(버전 23.1.0)을 지정하여 asdf를 실행하고 다시 node --version을 사용하여 버전 23.1.0을 사용하고 있음을 확인합니다. 마지막으로 홈 디렉터리로 돌아가면 로컬에서 Node.js 버전이 여전히 20.0.0인 것을 확인할 수 있습니다.
이제 시스템에서 asdf가 작동하므로 shim이 무엇인지, asdf로 작업할 때 shim이 왜 중요한지 알아보겠습니다.
컴퓨터 과학에서 shim은 여러 버전 간에 명령(예: 라이브러리 메서드 호출)을 투명하게 리디렉션하는 방법입니다. 여기서 핵심은 '투명하게'라는 단어다. asdf의 전체 아이디어는 사용자가 노드, Python 또는 기타 패키지를 작성할 때 실제로 호출되는 것을 투명한 방식으로 변경할 수 있도록 하는 것입니다. 사용자는 node 또는 python을 계속 입력하지만 asdf는 .tool-versions 파일에 작성된 내용에 따라 올바른 버전에 대한 다른 경로(shim)를 설정했습니다.
플러그인은 asdf가 특정 명령의 적절한 버전을 선택할 수 있도록 하는 영리한 쉘 스크립트 세트입니다(예: Node.js 플러그인 확인). bin 디렉토리의 명령은 Node.js 플러그인을 사용하여 새 버전을 설치하고 사용할 특정 버전을 선택할 때 asdf가 실행해야 하는 작업을 구현합니다.
mise 설치 과정은 git 저장소를 복제할 필요가 없기 때문에 asdf에 비해 더 쉽습니다.
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
활성화 가이드는 매우 간단합니다. 위의 명령을 실행하고 셸을 다시 시작하면 다음을 실행할 수 있습니다.
$ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
설치 상태가 표시됩니다. Mise가 설치되면 [mise activate](https://mise.jdx.dev/cli/activate.html) 명령을 사용하여 활성화해야 할 수도 있습니다.
이 시점에서 가장 일반적인 작업, 즉 특정 버전의 프레임워크를 설치하여 시스템에서 전역적으로 사용할 수 있도록 mise 명령을 사용할 수 있습니다.
$ asdf install nodejs latest
노드 실행 파일이 시스템에 없는 상황부터 시작합니다. mise 명령을 사용하여 특정 노드 버전을 전역적으로 설치하여 사용할 수 있도록 합니다. 현재 설치된 도구의 버전을 확인하려면 다음 명령을 사용할 수 있습니다.
$ asdf install nodejs 20.0.0
위 명령어를 보면 위 상자에 설치된 Node Tool과 Python 버전을 확인할 수 있습니다.
mise 프레임워크는 동일한 asdf 메커니즘을 사용하여 시스템 전체와 특정 디렉터리 내에서 다양한 도구 구성을 처리합니다. asdf에서 .tool-versions 파일의 역할은 구성을 수집하는 mise.toml 파일에 의해 수행됩니다.
mise에는 asdf 플러그인과 유사한 개념이 없으며 이는 asdf에서 특정 버전의 도구(예: node@20.0.0)를 설치하는 것이 2단계 프로세스이기 때문에 좋은 것입니다( 먼저 Node.js 플러그인을 설치한 다음 특정 Node 버전을 설치하세요). mise에서는 필요한 도구의 단일 버전을 간단히 처리하면, mise가 뒤에서 이를 구성하는 모든 무거운 작업을 처리합니다. 다음 두 상자에서 asdf 명령이 mise로 어떻게 변환되는지 확인할 수 있습니다.
$ asdf shim-versions node nodejs 20.0.0 nodejs 23.1.0
mise에서는 플러그인과 런타임을 설치하고 버전을 설정하는 단일 단계로 이 모든 작업을 수행할 수 있습니다.
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
asdf의 일반적인 장황함은 mise의 설탕 문법으로 우아하게 해결됩니다. 그럼에도 불구하고 mise는 다양한 버전을 처리하는 방식이 다르며, 이는 전체 경험에 더 넓은 영향을 미칩니다. 다음 이미지에서는 asdf가 작동하는 환경에서 node 명령을 실행할 때 어떤 일이 발생하는지 보여줍니다.
물론 이 프로세스는 명령을 실행하는 데 필요한 시간에 영향을 미칩니다. 반면, mise는 명령을 실행하는 운영 체제의 기본 메커니즘인 PATH 변수라는 또 다른 메커니즘을 활용하여 구성에 따라 올바른 도구를 선택하는 것과 동일한 문제를 해결합니다.
mise를 사용하지 않고 명령(예: node)을 실행하는 것과 성능은 동일합니다. 참고로, mise는 asdf와 관련하여 다르게 작동합니다. mise는 사용자가 디렉터리를 변경할 때 내부 후크를 호출하여 PATH 변수를 업데이트하도록 디렉터리의 모든 변경 사항을 추적합니다. 이 후크는 Rust로 작성되었으며 PATH 변수를 즉시 설정하여 환경을 구성하므로 매우 효율적입니다.
asdf와 mise는 각각 고유한 메커니즘을 갖춘 여러 도구 버전을 효과적으로 관리합니다. mise는 PATH 후크 메커니즘 덕분에 효율성이 뛰어나고 asdf는 더 넓은 도구 호환성을 제공하지만 심 메커니즘의 성능 저하가 있습니다. asdf 플러그인과 mise의 호환성은 도구 간의 격차를 해소합니다.
속도를 우선시하든 선택을 우선시하든 두 도구 모두 개발자가 환경을 쉽게 관리할 수 있도록 지원하여 다양한 패키지와 도구를 위한 풍부한 생태계를 제공합니다.
NPM:
$ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
스크립트 태그:
$ asdf install nodejs latest
3.(선택 사항) 스택과의 심층 통합을 위해 플러그인을 설치합니다.
지금 시작하세요.
위 내용은 JavaScript 프로젝트 환경 관리를 위한 mise 대 asdf의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!