暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

更换node版本切换工具n模块的镜像源

胡聊前端 2021-02-17
2851

切换命令

    # 设置环境变量
    export N_NODE_MIRROR=https://npm.taobao.org/mirrors/node
    # 切换node的版本
    $ sudo -E n stable
    复制

    以下是扩展阅读...

    前言

    n
    模块是 nodejs 非常方便的版本管理工具,简单易用。但最近切换 node 时,使用官方源下载非常慢,经常失败。所以就想着是不是可以像npm
    或者其他包管理工具一样可以换个国内的源。查阅官方文档如下:

    Custom Source If you would like to use a different node mirror which has the same layout as the default https://nodejs.org/dist/, you can define N_NODE_MIRROR. The most common example is users in China can define:

      $ export N_NODE_MIRROR=https://npm.taobao.org/mirrors/node
      复制

      然而按照如上配置发现并不可行。速度依旧龟速。

      分析原因

      想着既然官方文档已经说明可以,一定是自己哪里配置的有问题。仔细观察,发现n
      模块在安装过程中,$N_NODE_MIRROR
      变量仅在当前窗口中生效,而在n
      脚本执行过程中并未生效。

        # 虽然环境变量已经生效了
        $ echo $N_NODE_MIRROR
        https://npm.taobao.org/mirrors/node/




        # 但仍旧使用nodejs网址下载
        installing : node-v14.15.5
        mkdir : usr/local/n/versions/node/14.15.5
        fetch : https://nodejs.org/dist/v14.15.5/node-v14.15.5-darwin-x64.tar.xz
        复制

        查看源代码

        由于n
        命令执行过程中,并未输出所需的日志,所以不得不看看源代码,看看能不能打个日志,debug下到底哪里出了问题。

        以下是关键的代码片段

          # 我自行加了一行日志
          echo $N_NODE_MIRROR


          # 原有为N_NODE_MIRROR变量赋值的代码片段。
          N_NODE_MIRROR=${N_NODE_MIRROR:-${NODE_MIRROR:-https://nodejs.org/dist}}
          N_NODE_MIRROR=${N_NODE_MIRROR%/}
          readonly N_NODE_MIRROR
          复制

          经排查发现$N_NODE_MIRROR 根本就没有被赋上值...

          后尝试将 N_NODE_MIRROR 写入到~.bash_profile
          中也不行。

          问题解决

          一筹莫展之际,突然想到应该是因为n
          模块使用sudo
          进行安装的。所以当执行sudo n stable
          这种命令的时候,可能切换用户了,而并未保持环境变量。所以想到可以尝试下面两种方式去解决:

          设置 root 的/etc/profile 文件使用 sudo
           时添加 -E
           参数

          -E, --preserve-env

          Indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the user does not have permission to preserve the environment.

          即在切换用户时候保留环境变量。

          鉴于第二种方式显然更简单一些,所以,尝试执行之:

            # 设置环境变量
            export N_NODE_MIRROR=https://npm.taobao.org/mirrors/node
            # 安装
            $ sudo -E n stable
            复制

            接着就看到最新版的 Node 光速下载完了 :)

              installing : node-v14.15.4
              mkdir : /usr/local/n/versions/node/14.15.4
              fetch : https://npm.taobao.org/mirrors/node/v14.15.4/node-v14.15.4-darwin-x64.tar.xz
              installed : v14.15.4 (with npm 6.14.10)
              复制


              文章转载自胡聊前端,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论