如果没有 .tool-versions 文件,请不要使用 asdf?



我安装了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"

相关内容

  • 没有找到相关文章

最新更新