嗨,我有两个项目,一个在angularjs 4.4.7中,另一个在angular 6版本中。为此,我需要在节点版本之间切换。我尝试使用手动工作的NVM。自动加载最新的角度页面时,如何处理angularjs程序中的版本更改以更改节点版本。有没有可能这样的方法?我也经历了#avn,但是如何创建.node-version文件。有人可以帮助您提供任何链接或纠正示例步骤
答案 0 :(得分:2)
在GitHub上的nvm仓库中检查README。已经给出了解决方案。
对于 bash ,请将以下内容放在$HOME/.bashrc
的末尾,shell将根据目录下的.nvmrc
文件更改节点版本。
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)
declare locally_resolved_nvm_version
# `nvm ls` will check all locally-available versions
# If there are multiple matching versions, take the latest one
# Remove the `->` and `*` characters and spaces
# `locally_resolved_nvm_version` will be `N/A` if no local versions are found
locally_resolved_nvm_version=$(nvm ls --no-colors "$nvm_version" | tail -1 | tr -d '\->*' | tr -d '[:space:]')
# If it is not already installed, install it
# `nvm install` will implicitly use the newly-installed version
if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then
nvm install "$nvm_version";
elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then
nvm use "$nvm_version";
fi
fi
}
alias cd='cdnvm'
由于Bash中没有钩子支持,因此上述解决方案很丑。
对于 zsh ,请将其放入您的$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
更好的解决方案是使用nodenv。我不是在开玩笑,nodenv
与nvm和n完全不同。
nodenv
是rbenv
家族的成员。这些版本管理器比其他版本管理器具有很大的优势。
PATH
。这使其具有对自动切换节点版本的内置支持。nodenv
中的自动版本切换不必挂在chpwd
上,就可以定期检查目录更改。版本选择会延迟到执行node
命令时。nodenv
中的命令在脚本中实现。而nvm
中的命令是在函数中实现的,这意味着必须在shell启动时解析所有4000余行代码,并显着增加shell初始化时间。 nodenv
的初始化速度更快。参考
答案 1 :(得分:1)
如@ Aditya-M-P所述,您可以在项目根目录中运行以下命令来生成.nvmrc
,以设置所需的NodeJS版本以使项目正常工作。
node -v > .nvmrc
它将在您的.nvmrc
文件中生成如下内容:
v10.16.2
也可以使用不带10.16.2
字母的v
来正常工作。
但是,在.nvmrc部分的官方文档中,它从未提及创建此文件后,将自动加载指定的节点版本。
因此这还不够,您需要运行上面的命令,以便nvm
可以查找.nvmrc
文件来加载指定的版本:
nvm use
要自动加载指定的节点版本:
您需要根据您使用的bash
或zsh
要获取每个设备的确切配置,请按照相应的shell config section中的说明进行操作。
在我的情况下,我使用的是zsh
,所以我确实需要在.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
我希望它对其他面临相同问题的人有用! ?
答案 2 :(得分:0)
在nvm
存储库中与此相关的GitHub issue thread中指出,您可以在每个Angular项目文件夹中运行以下命令:
$ node -v > .nvmrc
请注意,您需要先在每个项目中切换到正确版本的节点,然后再运行上述命令 。
命令中发生的事情:
node -v
会将node
的当前版本转换为stdout
。>
符号将把输出redirecting
.nvmrc
到文件cd
(如果已经存在具有相同文件名的文件,它将覆盖)。 nvm
进入目标目录后,row_number
现在将首先读取文件,并自动切换到正确的版本。