为什么在 Ubuntu 16.04 上安装 node 6.x 实际上会安装 node 4.2.6?

为什么在 Ubuntu 16.04 上安装 node 6.x 实际上会安装 node 4.2.6?

这些是我在 Ubuntu 16.04 上安装节点的步骤:

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs 
sudo apt-get install -y npm

以下是官方说明:

https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions

完成此操作后,运行nodejs --version将返回v4.2.6

正如我使用的那样,我假设会安装 setup_6.x以 开头的版本?6

我认为也许setup_6.x应该是setup_6.2.1,但该页面返回 404,请参阅:

https://deb.nodesource.com/setup_6.x(那里有一个页面)

https://deb.nodesource.com/setup_6.2.1(返回 404)

如何在 Ubuntu 16.04 上安装最新稳定版本的 Node?

编辑:

运行后的结果如下sudo apt-get install -y nodejs

sudo apt-get install -y nodejs 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  gyp libboost-python1.58.0 libjs-inherits libjs-node-uuid libjs-underscore
  libssl-dev libssl-doc libuv1-dev linux-headers-4.4.0-18
  linux-headers-4.4.0-18-generic linux-headers-4.4.0-21
  linux-headers-4.4.0-21-generic linux-image-4.4.0-18-generic
  linux-image-4.4.0-21-generic linux-image-extra-4.4.0-18-generic
  linux-image-extra-4.4.0-21-generic linux-signed-image-4.4.0-18-generic
  linux-signed-image-4.4.0-21-generic python-configobj python-pycurl
  python-pyexiv2 python-pyexiv2-doc
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
  nodejs
0 to upgrade, 1 to newly install, 0 to remove and 0 not to upgrade.
Need to get 0 B/3,162 kB of archives.
After this operation, 13.2 MB of additional disk space will be used.
Selecting previously unselected package nodejs.
(Reading database ... 329473 files and directories currently installed.)
Preparing to unpack .../nodejs_4.2.6~dfsg-1ubuntu4_amd64.deb ...
Unpacking nodejs (4.2.6~dfsg-1ubuntu4) ...
Processing triggers for doc-base (0.10.7) ...
Processing 1 added doc-base file...
Registering documents with scrollkeeper...
Processing triggers for man-db (2.7.5-1) ...
Setting up nodejs (4.2.6~dfsg-1ubuntu4) ...
update-alternatives: using /usr/bin/nodejs to provide /usr/bin/js (js) in auto mode

编辑:

结果apt-cache policy nodejs

apt-cache policy nodejs
nodejs:
  Installed: 4.2.6~dfsg-1ubuntu4
  Candidate: 4.2.6~dfsg-1ubuntu4
  Version table:
 *** 4.2.6~dfsg-1ubuntu4 500
        500 http://au.archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
        100 /var/lib/dpkg/status

答案1

核心原因是安装脚本没有正确运行。因此,感谢 OP 提供的更新数据,apt因为脚本没有正确配置 NodeSource 存储库中的数据,所以它从未被看到过。

因此,脚本可能没有找到您的发行版,或者在配置存储库时出现问题,或者发生网络中断,或者由于上千种原因导致脚本中断而无法完成其工作。

您看到版本正在安装这一事实4.x意味着脚本没有正确完成其工作,因此脚本不一定有错。这只是意味着我们必须以更困难的方式完成此操作。

我应该指出:该脚本实际上不执行任何安装 - 它所做的只是确定您使用的 Debian/Ubuntu 版本,并配置其要从中获取数据的存储库。安装部分实际上是sudo apt-get install您手动运行的步骤。


还要注意:这将删除npm 包裹但这是因为nodejs上游包装会包含npm它——不需要包装npm


我们不用依赖脚本,而是可以用传统的方式完成脚本所做的事情:手动设置存储库配置并安装 NodeJS。

以下是实现该功能的手动方法,基本上就是脚本所做的事情(第 4 步除外,第 4 步是为了确保您获得准确的版本数据):

  1. 创建新文件:/etc/apt/sources.list.d/nodesource.list

    您需要使用 创建此文件sudo,但在创建文件时,请将其放入其中:

    deb https://deb.nodesource.com/node_6.x xenial main
    deb-src https://deb.nodesource.com/node_6.x xenial main
    

    然后,保存文件。(对于较新的 Node 版本,请node_6.xnode_7.x或等替换)node_8.x

  2. 从 Nodesource 下载存储库的 GPG 签名密钥否则,您可能会收到NO_PUBKEY错误apt-get update(如果未安装,则wget在此命令中使用,如果两者都未安装,则安装其中一个):curl

    curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -
    
  3. 手动运行sudo apt-get update

    这会刷新来自 nodesource repo 的数据,以便apt知道存在较新的版本。

    如果出现NO_PUBKEYGPG 错误,请返回步骤 2

  4. 检查apt-cache policy nodejs输出。

    这不是由脚本完成的,但是您要确保在输出中看到类似这样的条目(尽管如果您没有使用 6.x 作为版本字符串,版本可能会有所不同;我们唯一关心的是有一个通过 nodesource 提供的较新的版本号):

    Version table:
        6.2.1-1nodesource1~xenial1 500
           500 https://deb.nodesource.com/node_6.x xenial/main amd64 Packages
        4.2.6~dfsg-1ubuntu4 500
           500 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
    

    如果您没有看到这样的条目,而只看到 4.2.6,请重新开始。否则,请继续。

  5. 安装nodejs二进制文件。 现在您已确认系统上有 6.x 可用,您可以安装它:sudo apt-get install nodejs

  6. nodejs --version现在应该在输出中显示v6.2.1或类似内容(只要它以v6.版本 6 开头;如果您使用的版本比 6 新,则这可能是一个更高的版本号,但只要它不是 4.2.6,你就应该可以使用)。

答案2

我有一个旧版本的 node。我所需要做的就是清除旧版本:

sudo apt-get purge nodejs npm

然后,v=6根据相应版本的需求,将 6 替换为 7、8、9(参见官方安装说明):

v=6
curl -sL https://deb.nodesource.com/setup_$v.x | sudo -E bash -

(确保您已经安装了 curl。)

最后,

sudo apt-get install -y nodejs

Boom,节点的最新版本。

答案3

对于 Ubuntu 16.04.2 版本的用户(与 Thomas 的帖子略有不同,感谢他)

1.打开软件更新程序

2.设置

3.其他软件

4.添加来源但记得稍后选择所有新来源选项:


deb https://deb.nodesource.com/node_6.x xenial main
deb-src https://deb.nodesource.com/node_6.x xenial main

5.重新加载

6.sudo apt-get update

7. apt-cache policy nodejs//获取新版本表并检查源是否设置完成

8.sudo apt install nodejs

9.nodejs --version

现在一切都设置好了......

警告:不要从更新程序面板更改您的 nvidia 卡的 Linux 默认驱动程序......系统将崩溃....!!!

答案4

通过添加@Thomas Ward 回答那些在使用 https URL 安装 nodejs 8.x 或代码时遇到问题的人,继续安装 v4.2.6 并显示证书错误,尝试使用以下几行添加 nodesource.list

deb http://deb.nodesource.com/node_8.x xenial main
deb-src http://deb.nodesource.com/node_8.x xenial main

下一步:运行

sudo curl -sL http://deb.nodesource.com/setup_8.x | sudo -E bash -

然后

sudo apt-get install -y nodejs

这将通过安装更新​​的 nodejs 版本和 npm 版本来解决您的问题,因为它解决了我针对 Ubuntu 16.04 LTS 的问题......

相关内容