49

我搜索了 Stack Overflow 和 GitHub(对于 node 和 nvm)来寻找答案,但无济于事。

在某些存储库(例如 GitHub 的 Atom 文本编辑器)中,我遇到了一个.node-version文件。它似乎类似于.ruby-version与任何 Ruby 版本管理器一起为项目正确设置 Ruby 的当前版本的标准文件。

但据我从它的文档中可以看出,nvm(节点版本管理器)只尊重一个.nvmrc文件——它没有提到更通用的.node-version文件。并且在 node 的文档中没有提及.node-version(我不希望有,因为它没有提供开箱即用的版本管理器)。我不知道任何其他大量使用的节点版本管理器。

所以我的问题是,什么是.node-version?什么工具实际使用它?它只是 的别名.nvmrc,还是我在这里遗漏了什么?

4

7 回答 7

34

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

nvm毫无疑问,最常用的节点版本管理器是nave、 和n

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

nvm使用一个.nvmrc文件,该文件包含通常与or结合.ruby-version使用的版本字符串 X。或者它自己会找到文件,就像在打开一个新的 shell 时简单地进行采购一样。nvm use Xnvm install Xnvm usenvm install.nvmrcnvm

它似乎nave支持一个.naverc文件,但我不太熟悉它的用法。

n似乎不支持任何此类配置,但由于它是系统范围的,因此这样做并没有多大意义。


avn支持.node-version并尝试通过 hook into 来提供自动版本切换cd,之后nvm确定这是一种过于侵入性的行为而无法包含。

于 2015-04-09T17:50:46.667 回答
33

node.js 至少有两个版本管理器,尊重.node-version文件:

  • avn - 自动节点版本切换
  • nodenv - 另一个版本管理器
  • asdf - 可扩展的版本管理器,支持 Ruby、Node.js、Elixir、Erlang 等,只要您相应地配置它

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

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

于 2014-12-13T16:17:36.447 回答
19

.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)
  • nodeenv管理多个 NodeJS 版本。(macOS、Linux)
  • nodist用于 Windows 的自然 node.js 和 npm 版本管理器。(视窗)
  • nvm.fish Node.js 版本管理器为 Fish 精心打造。(macOS、Linux)
  • nvs Node Version Switcher - 用于在 Node.js 的版本和分支之间切换的跨平台工具。(macOS、Linux、Windows)

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

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

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

于 2020-07-19T08:47:11.027 回答
4

asdf和asdf -nodejs支持.node-version

legacy_version_file = yes

添加到~/.asdfrc

于 2020-02-05T13:08:14.713 回答
4

Direnv支持.node-version.nvmrc文件。Direv是我用来加载特定于项目的 Node.js 版本的所有工具。

https://github.com/direnv/direnv/wiki/node#load-nodejs-version-from-a-node-version-or-nvmrc-file

于 2017-02-05T19:39:23.727 回答
3

fnm 还支持 .node-version https://github.com/fisherman/fnm/

for f in .fnmrc .nvmrc .node-version
于 2018-05-25T08:01:24.700 回答
2

使用nvm usenvm install不使用版本,nvm 将爬上文件树在文件中寻找版本.nvmrc,通常stable~/.nvmrc.

这是一个粗略的 6 行 git 补丁,.node-version如果没有.nvmrc找到文件,它将查找本地文件:

~/.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,无需安装额外的软件包,只是(我认为是)一个合理的默认设置。

于 2017-07-28T22:05:31.057 回答