我安装了node.js:
brew install node
我还安装了asdf与node.js插件。如果没有.tool-versions
文件,是否有办法使用通过Homebrew全局安装的node.js ?
现在我得到一个错误,如果这个文件不存在:
No version is set for command node
Consider adding one of the following versions in your config file at
nodejs 19.0.0
nodejs 19.0.1
nodejs 19.1.0
nodejs 19.2.0
我不想全局使用asdf。只有几个项目。
它并没有完全回答你的问题,但我偶然发现了同样的问题,并找到了以下解决方案,用于使用asdf
与一些项目,但不是其他:
我没有为每个shell提供asdf脚本,而是将它们包装在一个条件中。~/.bashrc
(Linux &Bash(在您的示例中可能是${ZDOTDIR:-~}/.zshrc
)可能包含以下内容:
# ASDF tool version manager
if [ -n "$WITH_ASDF" ]; then
. "$HOME/.asdf/asdf.sh";
. "$HOME/.asdf/completions/asdf.bash";
else
alias asdf="WITH_ASDF='true' /bin/bash";
fi;
有了这个asdf最初根本不加载,我可以像以前一样使用NVM(或者,在你的情况下,系统的nodeJS)。只需在终端中输入asdf
,就会调用一个新的shell,并加载asdf。要返回到非asdf shell,一个简单的exit
(或Ctrl+D)就可以了。
$> which node
/home/andi/.nvm/versions/node/v16.19.0/bin/node
$> asdf
$> which node
/home/andi/.asdf/shims/node
$> exit
(显然,您必须根据您的特定环境调整上述内容,即Homebrew和ZSH,基于asdf的入门页面中的这些代码示例。)
如果您愿意,您可以将此原则反过来,并将asdf作为默认值(包含一些仅在使用NVM时适用的额外步骤)(未经测试):
# ASDF tool version manager
if [ -z "$NO_ASDF" ]; then
. "$HOME/.asdf/asdf.sh";
. "$HOME/.asdf/completions/asdf.bash";
# This alias could also be called "nvm"
alias noasdf="NO_ASDF='true' /bin/bash";
# This "else" block is optional if you only want to use the system's nodeJS
else
# Node version manager
export NVM_DIR="$HOME/.nvm";
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm;
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"; # This loads nvm bash_completion
fi;
您可以在此基础上构建脚本,并在任何给定时间自动评估cwd中是否存在.tool-versions
文件,然后自动启动或退出shell,但这超出了我的shell-fu。
使用Bash,您可以使用PROMPT_COMMAND来检查.tool-versions
文件是否存在于当前文件夹中,并从PATH
中添加或删除.asdf
文件夹。
把这个添加到你的.bashrc
:
conditional_asdf() {
if [ ! -f "$PWD/.tool-versions" ]; then
export PATH=`echo $PATH | sed -E 's/(.*).asdf([^:]*)://'`
else
export PATH="${HOME}/.asdf/shims:${HOME}/.asdf/bin:${PATH}"
fi
}
PROMPT_COMMAND="conditional_asdf; $PROMPT_COMMAND"