nvm use
디렉토리에 .nvmrc 파일이있을 때마다 자동으로 실행 되도록 셸을 구성 하고 .nvmrc 파일이 없을 때 최신 버전 또는 전역 구성을 사용하는 방법은 무엇입니까?
답변
zsh (z 쉘) 를 사용하는 경우 :
.nvmrc 파일이있는 디렉토리에서 자동으로 ‘nvm use’호출
nvm이 사용할 노드를 알려주는 문자열과 함께 .nvmrc 파일이 포함 된 디렉토리를 입력 할 때마다 자동으로 nvm use를 호출하도록 $ HOME / .zshrc에 넣으십시오.
# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
local node_version="$(nvm version)"
local nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
elif [ "$nvmrc_node_version" != "$node_version" ]; then
nvm use
fi
elif [ "$node_version" != "$(nvm version default)" ]; then
echo "Reverting to nvm default version"
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
추가 정보 : https://github.com/creationix/nvm#zsh
답변
bash 를 사용하는 경우 다음을 ~/.bashrc
파일에 추가 할 수 있습니다 .
enter_directory() {
if [[ $PWD == $PREV_PWD ]]; then
return
fi
PREV_PWD=$PWD
[[ -f ".nvmrc" ]] && nvm use
}
export PROMPT_COMMAND=enter_directory
답변
@devius의 훌륭한 답변입니다 .
나는 그것을 확장하여 디렉토리 .nvmrc
없이 다른 디렉토리로 떠날 때 기본 버전으로 되돌릴 수 있습니다 .
~/.bashrc
:
#
# Run 'nvm use' automatically every time there's
# a .nvmrc file in the directory. Also, revert to default
# version when entering a directory without .nvmrc
#
enter_directory() {
if [[ $PWD == $PREV_PWD ]]; then
return
fi
PREV_PWD=$PWD
if [[ -f ".nvmrc" ]]; then
nvm use
NVM_DIRTY=true
elif [[ $NVM_DIRTY = true ]]; then
nvm use default
NVM_DIRTY=false
fi
}
export PROMPT_COMMAND=enter_directory
답변
Node.js https://github.com/wbyoung/avn의 자동 버전 전환에 대해 방금 알게되었으므로 사용할 수 있습니다.
이 스레드 https://github.com/creationix/nvm/issues/110을 따를 수도
있습니다.
답변
이 답변은 공식 nvm 문서 에서 가져온 것입니다. .
끝에 다음을 입력하십시오 $HOME/.bashrc
.
find-up () {
path=$(pwd)
while [[ "$path" != "" && ! -e "$path/$1" ]]; do
path=${path%/*}
done
echo "$path"
}
cdnvm(){
cd "$@";
nvm_path=$(find-up .nvmrc | tr -d '[:space:]')
# If there are no .nvmrc file, use the default nvm version
if [[ ! $nvm_path = *[^[:space:]]* ]]; then
declare default_version;
default_version=$(nvm version default);
# If there is no default version, set it to `node`
# This will use the latest version on your machine
if [[ $default_version == "N/A" ]]; then
nvm alias default node;
default_version=$(nvm version default);
fi
# If the current version is not the default version, set it to use the default version
if [[ $(nvm current) != "$default_version" ]]; then
nvm use default;
fi
elif [[ -s $nvm_path/.nvmrc && -r $nvm_path/.nvmrc ]]; then
declare nvm_version
nvm_version=$(<"$nvm_path"/.nvmrc)
# Add the `v` suffix if it does not exists in the .nvmrc file
if [[ $nvm_version != v* ]]; then
nvm_version="v""$nvm_version"
fi
# If it is not already installed, install it
if [[ $(nvm ls "$nvm_version" | tr -d '[:space:]') == "N/A" ]]; then
nvm install "$nvm_version";
fi
if [[ $(nvm current) != "$nvm_version" ]]; then
nvm use "$nvm_version";
fi
fi
}
alias cd='cdnvm'
이것은 다음보다 개선 된 것입니다.
- @Gabo Esquivel의 대답-다른 도구로 전환 할 필요가 없기 때문입니다 (
avn
). - @devius 및 @Adriano P의 답변- 프로젝트 내에서 상황을 다루지 않습니다.
이 별칭은 .nvmrc
파일 을 감지하기 위해 현재 디렉토리에서 ‘위로’검색 합니다. 발견되면 해당 버전으로 전환됩니다. 그렇지 않은 경우 기본 버전을 사용합니다.
답변
나는 이것에 대해 많은 해결책을 시도했지만 내가 원하는 방식으로 작동하지 않았으므로 직접 작성했습니다.
내가 아는 한, 다음 기준을 모두 충족하는 유일한 제품입니다.
- 디렉토리 트리를 검색하여 가장 가까운 버전을 검색하여 항상 올바른 버전을 사용하도록 보장합니다
.nvmrc
(예 🙂nvm use
. - 모든 유효한
.nvmrc
형식을 처리 할 수 있습니다 . - 설치된 버전이
.nvmrc
, - 나무 위에
default
아무.nvmrc
데도 없으면 원하는 것으로 가정합니다 . - 이미 올바른 Node 버전을 사용하고 있다면 완전히 조용하고 빠릅니다 .
답변
direnv를 사용하는 또 다른 솔루션 입니다. Direnv는 OS X 및 많은 배포판과 함께 제공되므로 설치할 필요가 없습니다.
사용하는 셸에 따라 .zshenv 또는 .bash_profile에 다음 두 줄을 추가합니다.
export NVM_DIR="$HOME/.nvm" # You probably have this line already
export NODE_VERSIONS="${NVM_DIR}/versions/node"
export NODE_VERSION_PREFIX="v"
콘텐츠와 함께 .envrc 파일을 프로젝트 루트에 추가합니다.
set -e
use node
마지막으로 디렉토리로 이동하십시오. (.zshenv를 소싱하는 것을 잊지 마십시오)
direnv는로드 구성을 허용할지 묻습니다. 입력 direnv allow
하고 짜잔!
direnv는 lts/*
.nvrmc 와 같은 멋진 구조를 지원하지 않습니다 . 긍정적 인 측면에서 direnv는 node, php, go, pyhton, ruby 등과 같은 여러 런타임을 지원하므로 단일 도구를 사용하여 경로 문제를 해결할 수 있습니다.