디렉토리에 .nvmrc 파일이있을 때마다 자동으로`nvm use` 실행 파일이있을 때마다 자동으로 실행

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'

이것은 다음보다 개선 된 것입니다.

이 별칭은 .nvmrc파일 을 감지하기 위해 현재 디렉토리에서 ‘위로’검색 합니다. 발견되면 해당 버전으로 전환됩니다. 그렇지 않은 경우 기본 버전을 사용합니다.


답변

나는 이것에 대해 많은 해결책을 시도했지만 내가 원하는 방식으로 작동하지 않았으므로 직접 작성했습니다.

올바른 노드 버전으로 자동 전환하는 ZSH 기능

내가 아는 한, 다음 기준을 모두 충족하는 유일한 제품입니다.

  • 디렉토리 트리를 검색하여 가장 가까운 버전을 검색하여 항상 올바른 버전을 사용하도록 보장합니다 .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 ​​등과 같은 여러 런타임을 지원하므로 단일 도구를 사용하여 경로 문제를 해결할 수 있습니다.