मेरे शेल को कॉन्फ़िगर कैसे करें ताकि nvm use
हर बार स्वचालित रूप से चलने पर निर्देशिका में .nvmrc फ़ाइल हो और जब कोई .nvmrc फ़ाइल न हो तो नवीनतम संस्करण या वैश्विक कॉन्फ़िगरेशन का उपयोग करें?
मेरे शेल को कॉन्फ़िगर कैसे करें ताकि nvm use
हर बार स्वचालित रूप से चलने पर निर्देशिका में .nvmrc फ़ाइल हो और जब कोई .nvmrc फ़ाइल न हो तो नवीनतम संस्करण या वैश्विक कॉन्फ़िगरेशन का उपयोग करें?
जवाबों:
यदि आप zsh (z शेल) का उपयोग करते हैं :
एक .nvmrc फ़ाइल के साथ निर्देशिका में स्वचालित रूप से 'एनवीएम उपयोग' को कॉल करना
जब भी आप एक निर्देशिका में प्रवेश करते हैं जो nnm का उपयोग करते हुए एक स्ट्रिंग के साथ एक .nvmrc फ़ाइल दर्ज करते हुए nvm कॉल करने के लिए अपने $ 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
cd
, क्योंकि यह हर बार जब आप निर्देशिकाओं को बदलते हैं। मैंने [[ -a .nvmrc ]] || return
लोड- nvmrc () की पहली पंक्ति में जोड़ा , और इससे इसके प्रदर्शन में काफी सुधार हुआ
.nvmrc
पेरेंट डाइरेक्टरीज़ के लिए जाँच नहीं करेगी और प्रोजेक्ट dir से बाहर node
होने पर यह डिफ़ॉल्ट संस्करण पर वापस नहीं जाएगी cd
।
@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 v.0.0 (64-bit) is not installed.
.Nvmrc फ़ाइल में होने पर भी विंडो पर बैश का उपयोग करना 9.3
।
VERSION=$(cat .nvmrc); nvm use $VERSION
मुझे अभी Node.js https://github.com/wbyoung/avn के लिए स्वचालित संस्करण स्विचिंग के बारे में पता चला है , आप इसका उपयोग कर सकते हैं।
आप इस सूत्र https://github.com/creationix/nvm/issues/110 का भी अनुसरण कर सकते हैं
यह उत्तर आधिकारिक एनवीएम प्रलेखन से लिया गया है ।
निम्नलिखित को अपने अंत में रखें $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'
यह एक सुधार है:
avn
) पर स्विच नहीं करना पड़ेगायह उपनाम किसी .nvmrc
फ़ाइल का पता लगाने के लिए आपकी वर्तमान निर्देशिका से 'ऊपर' खोजेगा । यदि यह मिल जाता है, तो यह उस संस्करण में बदल जाएगा; यदि नहीं, तो यह डिफ़ॉल्ट संस्करण का उपयोग करेगा।
cd
कुछ ऐसा नहीं है जो आप कभी बड़े बैचों में कर सकते हैं, इसलिए मुझे नहीं लगता कि यह तब तक मायने रखता है जब तक कि अंतराल मानव के लिए ध्यान देने योग्य न हो।
मैंने इसके लिए कई समाधानों की कोशिश की और कुछ भी उस तरह से काम नहीं किया जैसा मैं चाहता था, इसलिए मैंने अपना लिखा:
नोड संस्करण को सही करने के लिए ZSH ऑटो-स्विच पर कार्य करता है
जहां तक मुझे पता है, यह एकमात्र ऐसा है जो निम्नलिखित सभी मानदंडों को पूरा करता है:
.nvmrc
(जैसे nvm use
);.nvmrc
प्रारूप को संभाल सकता है ;.nvmrc
, तो आपको स्पष्ट रूप से चेतावनी देता है ,default
अगर .nvmrc
पेड़ कहीं भी नहीं है ;फिर भी एक अन्य समाधान direnv का उपयोग कर । डिरेनेव ओएस एक्स और कई डिस्ट्रो के साथ आता है इसलिए किसी इंस्टॉलेशन की आवश्यकता नहीं है।
इन दो लाइनों को अपने .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 आपको load config की अनुमति देने के लिए कहेगा। टाइप direnv allow
और वॉइला!
ध्यान दें कि direnv जैसे फैंसी कंस्ट्रक्शन का समर्थन नहीं करता है lts/*
। सकारात्मक पक्ष पर, direnv नोड, php, go, pyhton, ruby जैसे रनटम्स के एक समूह का समर्थन करता है जो हमें पथ के मुद्दों को हल करने के लिए एक उपकरण का उपयोग करने की अनुमति देता है।
@ Adriano P के उत्तर पर विस्तार करते हुए , मैं इस संस्करण का प्रस्ताव करता हूं जो कम सामान्य है (केवल काम करता है यदि .nvmrc
एक गिट रिपॉजिटरी रूट पर सेट किया गया है ), लेकिन उन मामलों में काम करता है जब हम प्रोजेक्ट में इसके रूट से कहीं और नेविगेट करते हैं:
_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
मैं इस zsh कॉन्फ़िगरेशन ढांचे का उपयोग करता हूं, जिसे ओह माय Zsh कहा जाता है। यह नियमित अपडेट के साथ एक बहुत ही सक्रिय भंडार है। यह कोशिश करो और मुझे यकीन है कि आप इसे पसंद करेंगे। ओह, और इसमें ऑटोमैटिक .nvmrc फीचर बिल्ट-इन है, इसलिए यह पैकेज थ्रू npm को इंस्टाल करने जितना ही सरल है!
अभी भी उपरोक्त समस्या का सामना कर रहे किसी व्यक्ति के लिए README के nvm
पास यह अनुभाग है जो सहायक होगा
https://github.com/creationix/nvm#deeper-shell-integration
व्यक्तिगत रूप से मैं अन्य समाधानों पर .bashrc
( https://github.com/creationix/nvm#automatically-call-nvm-use ) का संपादन पसंद करता हूं ।
bash