如何在Ubuntu中通过二进制文件安装Node.js 0.10.26

15

我是Linux的新手,正在尝试使用二进制文件安装nodejs的最新版本。我查阅了一些解决方案,建议在某些私有存储库(PPA)上使用apt-get进行安装,但我不想这样做。

因此,我运行了以下命令:

wget http://nodejs.org/dist/v0.10.26/node-v0.10.26-linux-x64.tar.gz
tar -zxvf node-v0.10.26-linux-x64.tar.gz
mv node-v0.10.26-linux-x64 node-v0.10.26
sudo cp -r node-v0.10.26 /usr/local/src

在这之后,我真的不知道该怎么做了。我读了一篇文章,建议创建符号链接,但我不太敢在不知道细节的情况下搞砸它。

请问你能给我一组命令,以便在此之后安装带有npm的node吗? 我想npm应该是这个二进制版本的一部分。


请查看此Shell脚本:https://github.com/gdbtek/setup-ubuntu/blob/master/cookbooks/node-js/recipes/install.bash - Nam Nguyen
4个回答

54

安装Node.js并获得最新版本(或您偏好的任何其他版本,无论是LTS还是“current”)的最佳方法是下载官方二进制捆绑包并解压缩。一种简洁的方式如下:

# Use version 0.10.26
$ NODE_VERSION="v0.10.26"

# To use a newer version, for example 6.10.3, use instead:
$ NODE_VERSION="v6.10.3"

$ curl -LO http://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-linux-x64.tar.gz
$ tar xzf node-$NODE_VERSION-linux-x64.tar.gz
$ sudo cp -rp node-$NODE_VERSION-linux-x64 /usr/local/
$ sudo ln -s /usr/local/node-$NODE_VERSION-linux-x64 /usr/local/node
基本思想是将归档文件的所有内容移动到 /usr/local,然后在 /usr/local/node 中创建一个符号链接,指向最新版本。
为了使命令行中使用“node”可执行文件时无需引用完整路径(/usr/local/node/bin/node),请将 /usr/local/node/bin 添加到您的 $PATH (通常需要修改 ~/.bash_profile~/.profile 文件;有很多文档介绍如何执行此操作)。
如果您需要更新 Node.js(假设它是版本 7.10.0),则只需在 /usr/local 中提取 tarball,并更新符号链接,以使其指向新的 tarball。然后,您可以选择删除旧文件夹。
2017 年 5 月更新:自“Creator Update”以来,上述命令现在也可以在 Windows 10 上使用“Windows 子系统”,通过 bash 运行。在 Windows 10 上的 Ubuntu 中,在像上面那样创建符号链接之后,要将文件夹添加到您的 $PATH,请在 ~/.bashrc 文件中添加 PATH="/usr/local/node/bin:$PATH"

我编写了这本食谱,以安装Ubuntu的最新版本Node-js:https://github.com/gdbtek/setup-ubuntu/blob/master/cookbooks/node-js/recipes/install.bash - Nam Nguyen
我能不能只是将 /usr/local/node-v0.10.26-linux-x64 添加到 $PATH 中呢? - qAp
3
你可以这样做,但每次更新Node后都需要更新$PATH。符号链接是更简单的方法。 - ItalyPaleAle
1
或者不要更改$PATH并在/usr/local/bin中创建符号链接(通常已经在$PATH中):/usr/local/bin $ sudo ln -s /usr/local/node-vxxx-linux-x64/bin/node(npm也是同样的方式)。 - Ivan Rave
1
@IvanRave,这样做是可行的,但你会“污染”你的/usr/local/bin并且未来的更新也会更加困难(如果node添加了另一个可执行文件怎么办?)。此外,它可能更容易成为冲突的来源(例如,另一个你安装的软件包决定添加自己的node可执行文件)。 - ItalyPaleAle
2
@user151841 很好的问题,你应该向发行版维护者询问!我猜测是因为Node.js更新太快了;发行版维护者需要在打包之前测试每个版本,这会带来问题。此外,Node.js还很年轻,在短短几年内就经历了许多重大版本发布(0.8、0.10、0.12、3、4、5、6),每个主要版本都会破坏npm依赖项。因此,管理员可能更喜欢安装自己的Node.js二进制文件... 我希望现在有了Node.js的LTS版本,这种情况会改变! - ItalyPaleAle

0

我将这两个答案结合起来用于我的Docker容器。我希望可执行文件已经在PATH中,而不需要我显式地进行设置。

#!/usr/bin/env bash
install_node() {
    NODE_VERSION="v8.3.0"

    curl -# "http://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-linux-x64.tar.gz" | tar -xz
    cp -pr "node-${NODE_VERSION}-linux-x64" "/usr/local/"
    ln -s "/usr/local/node-${NODE_VERSION}-linux-x64" "/usr/local/node"
    ln -s /usr/local/node/bin/* "/usr/local/bin"
    rm -rf "node-${NODE_VERSION}-linux-x64"
}
install_node

0

您可以在任何地方提取二进制文件并使用update-alternatives命令来维护符号链接,确定默认命令。例如,在我的笔记本电脑上:

首先,我将我的节点node-v10.16.3-linux-x64.tar.xz提取到/mnt/e/WSL_Ubuntu/Downloads/node-v10.16.3-linux-x64/文件夹中:

xxxx@xxxxPC:.../WSL_Ubuntu/Downloads$ tar xvf node-v10.16.3-linux-x64.tar.xz
xxxx@xxxxPC:.../WSL_Ubuntu/Downloads$ cd node-v10.16.3-linux-x64/

然后执行 update-alternatives --install 命令:

xxxx@xxxxPC:.../node-v10.16.3-linux-x64/bin$ sudo update-alternatives --install /home/wira/.local/bin/node node\
> /mnt/e/WSL_Ubuntu/Downloads/node-v10.16.3-linux-x64/bin/node 60
update-alternatives: using /mnt/e/WSL_Ubuntu/Downloads/node-v10.16.3-linux-x64/bin/node to provide /home/wira/.local/bin/node (node) in auto mode

现在我在终端上使用Node

xxxx@xxxxPC:.../node-v10.16.3-linux-x64/bin$ node --version
v10.16.3

你还应该在 npm 二进制文件上运行 update-alternatives --install 命令进行更新。


-1

我认为还有更简洁的方法

NODE_VERSION="v6.7.0"

# Download
curl -LO http://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-linux-x64.tar.gz

# uncompress
tar xzf node-$NODE_VERSION-linux-x64.tar.gz

# selective copy
cp -R ./node-$NODE_VERSION-linux-x64/bin/* /usr/local/bin
cp -R ./node-$NODE_VERSION-linux-x64/lib/* /usr/local/lib
cp -R ./node-$NODE_VERSION-linux-x64/include/* /usr/local/include
cp -R ./node-$NODE_VERSION-linux-x64/share/* /usr/local/share

Node现在应该可以工作了

$ node -e 'console.log("HI")'
HI

希望能有所帮助


请查看我上面的回答评论。这并不是真正的清理,因为如果您随后从软件包安装Node.js(例如作为另一个软件包的依赖项),可能会导致冲突。我强烈建议将node二进制文件保留在另一个目录中。 - ItalyPaleAle
@Qualcuno,你的提议可能会引起与我的冲突完全相同的问题。APT/RPM软件包不应安装到/usr/local/*,而是应安装到/usr/bin、/usr/lib、/usr/share等目录下。因此,如果系统软件包依赖于打包的NodeJS版本,则两个答案都可能导致相同的影响。 - brickpop
1
问题不在于破坏你将要安装的软件包,而是在于破坏正在运行在服务器上的 Node.js 生产应用程序。您不希望冒险让一个格式错误的软件包覆盖您服务器上的 Node 解释器。 - ItalyPaleAle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接