什么使用/尊重 .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 文件:

avn - 自动节点版本切换 nodenv - 又一个版本管理器 asdf - 支持 Ruby、Node.js、Elixir、Erlang 等的可扩展版本管理器,为您提供 configure it accordingly

可能还有其他一些版本管理器,但我不知道。

我不知道 Atom 使用哪个特定的版本管理器。 nodenv 在 github 上有更多的星星,但 avn 看起来更成熟,维护得更好,更不用说它与 n 和 nvm 的兼容性。

【讨论】:

ndenv 也使用.node-version 文件。 我推荐nodenv - 它也可以像rbenvpyenv 一样工作,这样你就可以继承你的知识。 好吧,如果解释什么不支持.node-version文件,答案可能会更短!所有已知的“节点版本管理器”似乎都支持它。据我了解,可以安全地假设他们可以安全地将其.nvmrc 文件重命名为.node-version,这将涵盖更多“节点版本管理器”。 - 好吧,看来我误解了这个答案,nvm 不支持.node-version,请参阅***.com/a/29545541/2391795【参考方案2】:

(披露:我维护http://nvm.sh)

node 最常用的版本管理器毫无疑问是nvmnaven

nvm 用于修改单个 shell 会话以使用您想要的版本。 nave 用于启动具有您要加载的版本的子shell。 n 用于切换单个系统范围的节点版本。

nvm 使用.nvmrc 文件,与.ruby-version 类似,包含通常与nvm use Xnvm install X 结合使用的版本字符串X。 nvm usenvm 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 usenvm 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是各种工具单独读取的文件,用于指定目标节点版本。使用/尊重它的版本管理器包括(按字母顺序):

asdf-nodejs asdf 版本管理器的 Node.js 插件。 (macOS、Linux) avn 节点自动版本切换。 (macOS、Linux) direnv 整理您的 .profile。 (macOS、Linux) fnm ? 快速简单的 Node.js 版本管理器,内置于 Rust。 (macOS、Linux、Windows) n 以交互方式管理您的 Node.js 版本。 (macOS、Linux) nodenv 管理多个 NodeJS 版本。 (macOS、Linux) nodist 适用于 Windows 的自然 node.js 和 npm 版本管理器。 (Windows) nvm.fish Node.js 版本管理器为 Fish 精心打造。 (macOS、Linux) nvs Node Version Switcher - 用于在 Node.js 的版本和分支之间切换的跨平台工具。 (macOS、Linux、Windows)

其他测试 .node-version 的产品包括:

Cloudflare Pages 建立快速站点。在创纪录的时间内。 Hostman 部署您的网络应用程序的托管平台 netlify 从 Git 即时构建您的站点并将其部署到我们的全球网络。 paketo您的应用程序, 用你最喜欢的语言, 准备在云端运行 render 新十年的云 starship ☄?️ 适用于任何 shell 的最小、极快且可无限自定义的提示!

我在这里记录了用法和一些支持的功能:https://github.com/shadowspawn/node-version-usage

【讨论】:

以上是关于什么使用/尊重 .node-version 文件?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的页面元素不尊重我的本地 Site.css 文件?

如何使 ls 尊重 .hidden 文件?

什么是尊重?

输入为啥不尊重flex?

Spring Boot - 没有写入日志文件(不尊重logging.file)

什么基于浏览器的所见即所得编辑器尊重我的 HTML 格式? [关闭]