【问题标题】:n <version> command does not activate specified versionn <version> 命令不激活指定版本
【发布时间】:2020-04-08 20:30:39
【问题描述】:

目前我在 Jenkins 服务器上安装了两个版本的节点。

$ n list
node/10.9.0
node/12.14.1

我正在尝试为需要它的特定构建切换到版本 10.9.0。

我首先尝试使用n &lt;version&gt;,但最新的 12.14.1 仍然显示为活动状态:

$ n 10.9.0
installed : v10.9.0 to /opt/jenkins/n/bin/node
   active : v12.14.1 at /bin/node

我也尝试过n use &lt;version&gt;,它只是跟随一个提示。

$ n use 10.9.0
>

我已阅读有关此的各种文章,但无法获得任何有效切换版本的命令。

https://blog.logrocket.com/switching-between-node-versions-during-development/

下面是 n 可执行文件。

which n
/opt/jenkins/n/bin/n

版本似乎安装在以下目录下:

/opt/jenkins/n/n/versions/node/
10.9.0  
12.14.1

以下是/opt/jenkins/n/bin/的内容

chrome-debug -> ../lib/node_modules/lighthouse/lighthouse-core/scripts/manual-chrome-launcher.js
lighthouse -> ../lib/node_modules/lighthouse/lighthouse-cli/index.js
n
ng
node
nodejs
npm -> ../lib/node_modules/npm/bin/npm-cli.js
npx -> ../lib/node_modules/npm/bin/npx-cli.js
n-uninstall
n-update

如何使用 n 切换节点版本?上面有什么遗漏的吗?提前致谢。

【问题讨论】:

  • 检查路径,好像添加了太多路径变量
  • 这是当前路径:echo $PATH /opt/rh/rh-python36/root/usr/bin:/usr/local/bin:/bin:/usr/bin:/usr/local /sbin:/usr/sbin:/opt/jenkins/n/bin:/opt/jenkins/.local/bin:/opt/jenkins/bin 我看到 /opt/jenkins/n/bin 这是所有节点可执行文件的位置是。路径中是否缺少某些内容,或者您​​的意思是文件夹的内容太多?
  • 我认为,文件夹/opt/jenkins/bin中还有另一个节点js实例
  • 清理 /opt/jenkins/ 文件夹并重新安装
  • 问题:node和nodejs是一回事吗?我拥有/opt/jenkins/n/bin 下的所有 n 个文件。只有一个 nodejs 在那里。有趣的是,路径显示 /opt/jenkins/bin 不存在

标签: node.js n


【解决方案1】:

运行which node 后,路径显示/bin/node

/bin/node 是指向/opt/jenkins/n/bin/nodejs 的符号链接。

$ ll /bin/node
lrwxrwxrwx 1 root root 25 Jan 28 08:26 /bin/node -> /opt/jenkins/n/bin/nodejs

安装时,n &lt;version&gt; 仅更新 /opt/jenkins/n/bin/node

$ n 10.9.0
   installed : v10.9.0 to /opt/jenkins/n/bin/node
      active : v12.14.1 at /bin/node

完成后,需要将 node 复制到 nodejs。

$ cp /opt/jenkins/n/bin/node /opt/jenkins/n/bin/nodejs
$ node -v
v10.9.0

【讨论】:

    【解决方案2】:

    您将节点的副本安装到多个位置,但只有一个位置由n 管理(使用N_PREFIX 设置)。你的PATH 包含了n 以后安装的副本,所以你只输入node 时不会运行。

    另请参阅n doctor,它会查找一些配置问题,包括这个问题。

    一种可能的解决方案是在路径中更早地使用您想要使用的位置,另一种是删除您不想要的节点副本。但是,您也可以直接运行节点的 n 托管副本,这可能非常适合 CI 类型的情况,并且不需要任何配置更改。

    n run(或n use)将您指定的节点版本作为一次性命令运行。例如

    $ n run 10.9.0 --version
    v10.9.0
    $ n run 10.9.0  -e 'console.log("hello")'
    hello
    $ n run 10.9.0  my-script.js
    

    【讨论】:

    • 谢谢。我可以通过将更新的/opt/jenkins/n/bin/node 复制到bin/node 符号链接指向的/opt/jenkins/n/bin/nodejs 来使其工作。我在最初的帖子中尝试了n use,以及n run,但我认为我没有在末尾附加--version,这可能是我得到提示的原因。
    猜你喜欢
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2014-05-27
    • 2016-10-26
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多