Nasıl benim kabuk yapılandırmak için böylece nvm use
vadede bir .nvmrc dizinde dosya ve kullanımı son sürümü ya da hiç .nvmrc dosya var global yapılandırma var otomatik olarak her zaman?
Nasıl benim kabuk yapılandırmak için böylece nvm use
vadede bir .nvmrc dizinde dosya ve kullanımı son sürümü ya da hiç .nvmrc dosya var global yapılandırma var otomatik olarak her zaman?
Yanıtlar:
Eğer kullanırsanız zsh (z kabuk):
.Nvmrc dosyası içeren bir dizinde otomatik olarak 'nvm kullanımı' çağrısı
Bunu $ HOME / .zshrc'nize koyun ve nvm'yi hangi düğümün kullanılacağını belirten bir dizeyle .nvmrc dosyası içeren bir dizine her girdiğinizde otomatik olarak nvm kullanımını çağırmak için:
# 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
Daha fazla bilgi: https://github.com/creationix/nvm#zsh
cd
dizinleri her değiştirdiğinizde çalıştığı için bir performans düşüşüne neden oldu . I ilave [[ -a .nvmrc ]] || return
yük nvmrc () birinci hattına ve önemli ölçüde bunun geliştirilmiş performans
.nvmrc
ana dizinlerde kontrol etmeyecek ve ayrıca proje dizininden node
çıktığınızda varsayılan sürüme geri dönmeyecektir cd
.
@Devius'tan mükemmel yanıt .
Bir dizini .nvmrc
onsuz bir başkasına bırakırken varsayılan sürüme geri dönebilmesi için genişlettim .
~/.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 v.0.0 (64-bit) is not installed.
, .nvmrc dosyası olsa bile bu geri döner 9.3
.
VERSION=$(cat .nvmrc); nvm use $VERSION
Node.js https://github.com/wbyoung/avn için Otomatik Sürüm Değiştirme hakkında yeni öğrendim , bunu kullanabilirsiniz.
Bu konuyu da takip edebilirsiniz https://github.com/creationix/nvm/issues/110
Bu cevap resmi nvm belgelerinden alınmıştır .
Aşağıdakileri sayfanızın sonuna koyun $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'
Bu, şunlara göre bir gelişme
avn
)Bu takma ad, bir .nvmrc
dosyayı tespit etmek için mevcut dizininizden 'yukarı' arama yapacaktır . Bulursa, o sürüme geçecektir; değilse, varsayılan sürümü kullanacaktır.
cd
, büyük gruplar halinde yapma olasılığınız olan bir şey değildir, bu yüzden gecikme bir insan tarafından fark edilmediği sürece önemli olduğunu düşünmüyorum.
Bunun için birçok çözüm denedim ve hiçbir şey istediğim gibi çalışmadı, bu yüzden kendim yazdım:
Doğru Düğüm sürümüne otomatik geçiş için ZSH işlevi
Bildiğim kadarıyla, aşağıdaki kriterlerin tümünü karşılayan tek kişi bu:
.nvmrc
(aynı şekilde nvm use
);.nvmrc
biçimi işleyebilir ;.nvmrc
,default
hiçbir yoksa .nvmrc
ağacın yukarı her yerde;Yine direnv kullanarak başka bir çözüm . Direnv, OS X ve birçok dağıtımla birlikte gelir, bu nedenle kurulum gerekmez.
Kullandığınız kabuğa bağlı olarak bu iki satırı .zshenv veya .bash_profile dosyanıza ekleyin:
export NVM_DIR="$HOME/.nvm" # You probably have this line already
export NODE_VERSIONS="${NVM_DIR}/versions/node"
export NODE_VERSION_PREFIX="v"
İçeriği olan proje köküne bir .envrc dosyası ekleyin
set -e
use node
Sonunda dizininize cd yapın. (.Zshenv kaynağını unutmayın)
direnv sizden yükleme yapılandırmasına izin vermenizi isteyecektir. Yazın direnv allow
ve işte!
Direnv'in .nvrmc'deki gibi süslü yapıları desteklemediğini lts/*
unutmayın. Olumlu tarafı, direnv node, php, go, pyhton, ruby vb. Gibi yol sorunlarını çözmek için tek bir araç kullanmamıza izin veren bir dizi çalışma zamanını destekler.
@Adriano P cevabını genişleterek , daha az genel olan bu sürümü öneririm (yalnızca .nvmrc
bir git deposu kökünde ayarlanmışsa çalışır), ancak projede kökünden başka bir yere gittiğimizde çalışır:
_enter_dir() {
local git_root
git_root=$(git rev-parse --show-toplevel 2>/dev/null)
if [[ "$git_root" == "$PREV_PWD" ]]; then
return
elif [[ -n "$git_root" && -f "$git_root/.nvmrc" ]]; then
nvm use
NVM_DIRTY=1
elif [[ "$NVM_DIRTY" == 1 ]]; then
nvm use default
NVM_DIRTY=0
fi
PREV_PWD="$git_root"
}
export PROMPT_COMMAND=_enter_dir
#export PROMPT_COMMAND="$PROMPT_COMMAND;_enter_dir" # use this if PROMPT_COMMAND already defined
Oh My Zsh adlı bu zsh yapılandırma çerçevesini kullanıyorum. Düzenli güncellemeleri olan çok aktif bir havuz. Deneyin ve eminim seveceksiniz. Oh, ve yerleşik otomatik .nvmrc özelliğine sahiptir, bu nedenle paketi npm aracılığıyla yüklemek kadar basittir!
Hala yukarıdaki sorunla karşı karşıya olan biri için README'nin nvm
bu bölümü faydalı olacak
https://github.com/creationix/nvm#deeper-shell-integration
Şahsen ben .bashrc
( https://github.com/creationix/nvm#automatically-call-nvm-use ) diğer çözümlere göre düzenlemeyi tercih ediyorum .
bash