什么使用/尊重 .node-version 文件?
Posted
技术标签:
【中文标题】什么使用/尊重 .node-version 文件?【英文标题】:What uses / respects the .node-version file? 【发布时间】:2015-02-10 02:44:13 【问题描述】:我已经在 Stack Overflow 和 GitHub(针对 node 和 nvm)中搜索了答案,但无济于事。
在某些存储库(例如like GitHub's Atom text editor)中,我遇到了一个.node-version
文件。它似乎类似于.ruby-version
标准文件,可与任何 Ruby 版本管理器一起为项目正确设置 Ruby 的当前版本。
But as far as I can tell from its documentation,nvm(节点版本管理器)仅尊重 .nvmrc
文件 - 它没有提及更通用的 .node-version
文件。并且在 node 的文档中没有提到 .node-version
(我不希望有,因为它没有提供开箱即用的版本管理器)。我不知道有任何其他节点版本管理器在大量使用。
所以我的问题是,.node-version
是什么?什么工具实际使用它?它只是.nvmrc
的别名,还是我在这里遗漏了什么?
【问题讨论】:
【参考方案1】:node.js 至少有两个版本管理器,尊重.node-version
文件:
可能还有其他一些版本管理器,但我不知道。
我不知道 Atom 使用哪个特定的版本管理器。 nodenv
在 github 上有更多的星星,但 avn
看起来更成熟,维护得更好,更不用说它与 n 和 nvm 的兼容性。
【讨论】:
ndenv 也使用.node-version
文件。
我推荐nodenv
- 它也可以像rbenv
和pyenv
一样工作,这样你就可以继承你的知识。
好吧,如果解释什么不支持.node-version
文件,答案可能会更短!所有已知的“节点版本管理器”似乎都支持它。据我了解,可以安全地假设他们可以安全地将其.nvmrc
文件重命名为.node-version
,这将涵盖更多“节点版本管理器”。 - 好吧,看来我误解了这个答案,nvm
不支持.node-version
,请参阅***.com/a/29545541/2391795【参考方案2】:
(披露:我维护http://nvm.sh)
node 最常用的版本管理器毫无疑问是nvm
、nave
和n
。
nvm
用于修改单个 shell 会话以使用您想要的版本。
nave
用于启动具有您要加载的版本的子shell。
n
用于切换单个系统范围的节点版本。
nvm
使用.nvmrc
文件,与.ruby-version
类似,包含通常与nvm use X
或nvm install X
结合使用的版本字符串X。 nvm use
或 nvm install
本身将找到 .nvmrc
文件,就像在打开新 shell 时简单地获取 nvm
一样。
似乎nave
支持.naverc
文件,但我不太熟悉它的用法。
n
似乎不支持任何此类配置,但由于它是系统范围的,因此这样做并没有多大意义。
avn
支持.node-version
并尝试通过挂钩cd
来提供自动版本切换,因为nvm
认为这是一种过于侵入性的行为而不能包含在内。
【讨论】:
您如何像 rvm 一样更改目录以切换到 .nvmrc? 你不会,不是自动的。nvm
不像 rvm
那样具有侵入性。您当然可以覆盖您的内置 cd
以运行 nvm use
,但是您多久使用一次 cd 而不是使用多个 shell 选项卡?
在 cd 进入项目时不必记住设置节点版本,这很好。没有什么比花费数小时试图弄清楚为什么您的应用程序突然无法运行更糟糕的了,因为您一直忘记将节点版本更改为您正在运行的应用程序已知运行的版本。缺乏对自动切换的支持让我考虑从 nvm 切换到 avn。
“自动切换”具有侵入性且缓慢。如果您想使用它,您可以自己覆盖cd
,或者您可以通过 avn 使用 nvm,它会为您完成。
@Vadorequest nvm 仅支持.nvmrc
。【参考方案3】:
Direnv 支持.node-version
和.nvmrc
文件。 Direnv 是我用来加载特定于项目的 Node.js 版本的全部。
https://github.com/direnv/direnv/wiki/node#load-nodejs-version-from-a-node-version-or-nvmrc-file
【讨论】:
【参考方案4】:使用没有版本的nvm use
或nvm install
,nvm 将爬上文件树在.nvmrc
文件中寻找版本,通常在~/.nvmrc
中登陆stable
。
这是一个粗略的 6 行 git 补丁,如果没有找到 .nvmrc
文件,它将查找本地 .node-version
文件:
~/.nvm/nvm.sh, ≈line 280
1 file changed, 8 insertions(+), 2 deletions(-)
# Obtain nvm version from rc file
nvm_rc_version()
local NVMRC_PATH
NVMRC_PATH="$(nvm_find_nvmrc)"
if [ ! -e "$NVMRC_PATH" ]; then
- nvm_err "No .nvmrc file found"
- return 1
+ local LOCAL_NODE_VERSION_DOTFILE_PATH
+ LOCAL_NODE_VERSION_DOTFILE_PATH="$PWD/.node-version"
+ if [ -e "$LOCAL_NODE_VERSION_DOTFILE_PATH" ]; then
+ NVMRC_PATH="$LOCAL_NODE_VERSION_DOTFILE_PATH"
+ else
+ nvm_err "No .nvmrc file found"
+ return 1
+ fi
没有 cd-hooking,不需要安装额外的软件包,只是(我认为是)一个合理的默认设置。
【讨论】:
【参考方案5】:fnm 也支持 .node-version https://github.com/fisherman/fnm/
for f in .fnmrc .nvmrc .node-version
【讨论】:
【参考方案6】:asdf 和 asdf-nodejs 支持 .node-version
和
legacy_version_file = yes
添加到~/.asdfrc
【讨论】:
【参考方案7】:.node-version
是各种工具单独读取的文件,用于指定目标节点版本。使用/尊重它的版本管理器包括(按字母顺序):
其他测试 .node-version 的产品包括:
Cloudflare Pages 建立快速站点。在创纪录的时间内。 Hostman 部署您的网络应用程序的托管平台 netlify 从 Git 即时构建您的站点并将其部署到我们的全球网络。 paketo您的应用程序, 用你最喜欢的语言, 准备在云端运行 render 新十年的云 starship ☄?️ 适用于任何 shell 的最小、极快且可无限自定义的提示!我在这里记录了用法和一些支持的功能:https://github.com/shadowspawn/node-version-usage
【讨论】:
以上是关于什么使用/尊重 .node-version 文件?的主要内容,如果未能解决你的问题,请参考以下文章