【问题标题】:Install Node.js to install n to install Node.js?安装Node.js 安装n 安装Node.js?
【发布时间】:2026-01-05 07:20:07
【问题描述】:

我在理解n 的用法时遇到了问题。基本上,很明显它是一个Node.js的版本管理器,比如nvm

但与nvm相比,它基本上是一个shell脚本,根据文档鼓励你使用npm安装n

$ npm install -g n

我不明白的是:要拥有npm,您需要安装 Node.js。为什么我要手动安装 Node.js 以使用 npm 然后才能使用 n 安装 Node.js?

换一种说法:如果n的主要目的是安装包含npm的Node.js,为什么n建议使用npm安装?

【问题讨论】:

    标签: node.js npm n


    【解决方案1】:

    tl;博士

    # Installs n and the latest LTS Node.js version to ~/n.
    # For bash, ksh, zsh, modifies the respective user-specific shell-initialization file to
    # define env. variable N_PREFIX and append $N_PREFIX/bin to the $PATH.
    curl -L https://git.io/n-install | bash  
    

    我感觉到你的痛苦。安装 Node.js 然后安装 n 然后管理 Node.js 安装确实是一个奇怪的设置。

    能自己先安装n确实很棒。

    我创建了一个project 来支持直接从GitHub 安装nn 本身需要的唯一先决条件是git

    请注意,您必须首先删除任何预先存在的 n / Node.js 版本。
    默认情况下,目标目录 ~/n 必须不存在或为空。
    对于bashkshzsh,相关的shell初始化文件(例如~/.bashrc)被自动修改为定义环境变量N_PREFIX并将$N_PREFIX/bin附加到$PATH;对于其他 shell,这必须手动完成。

    除了直接从 GitHub 安装 n 之外,它还安装用于更新 n (n-update) 和卸载它 (n-uninstall) 的帮助脚本。

    这里是工作示例;详情见n-install GitHub repo

    • 安装有确认提示以确认安装到默认位置$HOME/n 并安装最新的 LTS Node.js 版本:

      curl -L https://git.io/n-install | bash
      
    • 自动安装到默认位置,随后安装最新的 LTS(长期支持)和最新的整体 Node.js 版本,以及最新的 4.1.x Node.js 版本:

      curl -L https://git.io/n-install | bash -s -- -y lts latest 4.1
      
    • 自动安装到默认位置,无需后续安装Node.js版本:

      curl -L https://git.io/n-install | bash -s -- -y -
      
    • 自动安装到自定义位置~/util/n,随后安装最新的 LTS Node.js 版本:

      curl -L https://git.io/n-install | N_PREFIX=~/util/n bash -s -- -y
      

    【讨论】:

    • n-install 是否让我安装多个版本的 n? :D
    • @btx9000:是的:您可以将两个版本的n 并排安装以升级到m
    【解决方案2】:

    如果您愿意,可以从源代码安装 n:

    cd /tmp
    git clone --depth=1 https://github.com/tj/n
    cd n
    sudo make install
    

    然后就可以安装最新的稳定版node了,如下:

    n stable
    

    【讨论】:

    • 我只想补充一点,如果您在“make install”期间遇到错误,您可能之前已经安装过它。然后你应该先调用“make uninstall”。
    • make installcp: cannot create regular file '/usr/local/bin/n': Permission denied 失败。也许更新示例以使用 sudo 运行?
    【解决方案3】:

    n 模块是为了方便而创建的。

    例如,如果您想将 Node.js 的版本从 v0.8.0 更新到 v0.10.20,您是否愿意下载一个包,解压并编译?还是您更愿意输入 n 0.10.20 并立即安装它,同时仍保留以前版本的 Node 以便于切换?

    n 建议使用 npm 来安装它,因为 n 是一个模块。也就是说,npm 是最简单的安装方式。 Node 模块具有在全局安装时能够在 shell 中运行的功能,因此利用该功能可以更轻松地切换 Node 版本。

    【讨论】:

    • 当然你是对的,直接输入n 0.10.20 就方便多了,但是为什么不使用n 来进行初始安装呢?这样,第一次安装感觉“特别”。例如:是否保证 n 使用与 Node.js 安装程序相同的文件夹?
    • 因为 n 是一个模块,而使用 npm 是最简单的安装方式。至于您的第二个问题,Node.js 二进制文件存储在 n 自己的目录中,例如/usr/local/n/versions,否则您将无法同时安装多个版本。
    • 但是那里没有安装初始安装 - 这不是问题吗?如果这个问题可能有点幼稚,请原谅我,但我只是想知道为什么会这样,我很好奇;-)
    • 如果没有初始安装,为什么会有问题?
    • 我不确定初始安装,但大多数情况下n prev 只会恢复以前的版本。 编辑:当您第一次添加新版本时,它似乎还会将初始安装保存到/usr/local/n/versions/.prev,就像任何安装一样。因此n prev 也可以恢复初始安装。
    【解决方案4】:

    也可以将npm与Node.JS分开安装;例如:在没有 Node.JS 的系统上:

    git clone https://github.com/npm/npm
    cd npm
    ./configure
    make
    

    参考:NPM GitHub project

    【讨论】:

      【解决方案5】:

      我也有同样的问题,但我看到了曙光。 'n' 是一个方便的工具,可以轻松测试不同版本的节点。在 Linux 上运行良好,但无论我如何尝试在 OS X 上安装它(git clone,然后 npm install 或使用 user456584 的推荐方法),当我运行它时,我总是得到相同的结果“错误:没有安装的版本”的结果,即使它安装到

      /usr/local/lib/node_modules/n

      /usr/local/bin/n

      令人沮丧,因为我发现这个工具在 Linux 上非常方便。

      【讨论】:

      • :) 这可能是一条评论。
      • 我也遇到了同样的问题。
      • Crooner, @fraxture:如果您仅通过克隆 n 的 GitHub 存储库进行安装,则预计找不到任何已安装的版本:您必须显式安装它们;例如,使用 n stable 安装最新的稳定 Node.js 版本。既没有安装 n 也没有安装 Node.js,您也可以尝试 curl -L http://git.io/n-install | bash,其中包括安装最新的稳定 Node.js 版本 - 请参阅 my answer
      • 如果还不清楚,错误消息是告诉您 n 尚未安装任何版本的 Node,而不是 n 本身尚未安装。显然,在没有安装 n 的情况下运行 n(即在您的 PATH 上)会给您一个 bash/ksh/zsh 错误消息,例如 -bash: n: command not found,而不是您看到的错误消息。
      【解决方案6】:

      如果你已经像这样在 $PATH 变量中包含了你的默认节点 bin

      export PATH=/usr/local/Cellar/node/11.5.0/bin:$PATH
      

      那么 n 将无法激活其他节点版本。从路径中删除此导出,然后您可以通过 n 管理当前活动的节点版本。

      【讨论】:

        【解决方案7】:

        n 的自述文件现在有一个更长的部分,涵盖了不同的 installation 方法。

        就像nvmn 是一个 bash 脚本。建议使用npm 作为安装n 的简单方法如果您已经拥有npm,然后您可以使用n 更改Node.js 版本。但是对于第一次安装 Node.js,还有很多其他方法。简而言之,没有特别的顺序......

        你可以使用 curl 安装n

        curl -L https://raw.githubusercontent.com/tj/n/master/bin/n -o n
        

        或者克隆n repo 并从那里安装:

        make install
        

        或者使用n-install:

        curl -L https://git.io/n-install | bash
        

        Homebrew:

        brew install n
        

        MacPorts:

        port install n
        

        (免责声明:我是n的当前维护者。)

        【讨论】:

          【解决方案8】:

          如果你使用 n 那么你应该使用下面的命令

          bash$ sudo n 最新

          【讨论】:

          • 这看起来根本不像是对 OP 问题的回答。