如何在Linux上安装节点二进制分发文件

san*_*chi 32 linux node.js

我的生产服务器(Centos 5.9)不会编译nodejs,可能是因为它的gcc只有4.1.2(建议使用4.2或更高版本)所以我试图安装二进制文件.

$ wget http://nodejs.org/dist/v0.10.22/node-v0.10.22-linux-x86.tar.gz
$ tar -zxvf node-v0.10.22-linux-x86.tar.gz
$ cd node-v0.10.22-linux-x86
$ sudo cp bin/* /usr/local/bin
$ sudo cp -R lib/* /usr/local/lib
$ sudo cp -R share/* /usr/local/share
Run Code Online (Sandbox Code Playgroud)

现在进行测试:

$ node -v  # => v0.10.22
$ man node # looks fine
$ npm -v   # UH OH, PROBLEM - Cannot find module 'npmlog'
Run Code Online (Sandbox Code Playgroud)

现在(记住我是节点的完全初学者)我做了一些搜索,发现有一个名为NODE_PATH的环境变量,所以我尝试了:

$ export NODE_PATH=/usr/local/lib/node_modules
$ npm -v   # SAME PROBLEM - Cannot find module 'npmlog'
Run Code Online (Sandbox Code Playgroud)

那么我找到了npmlog所在的位置并尝试相应地修改NODE_PATH:

$ find /usr/local/lib -name npmlog # => /usr/local/lib/node_modules/npm/node_modules/npmlog
$ export NODE_PATH=/usr/local/lib/node_modules/npm/node_modules
$ npm -v   # DIFFERENT PROBLEM - Can't find '../lib/npm.js'
Run Code Online (Sandbox Code Playgroud)

在这个阶段,经过更多无益的谷歌搜索,我决定我超越自己的深度,并决定寻求帮助.谁能告诉我我做错了什么?

小智 30

执行干净的NPM重新安装会更快,这将删除"损坏的"链接:

wget https://npmjs.org/install.sh

chmod +x install.sh
sudo ./install.sh
Run Code Online (Sandbox Code Playgroud)

然后它会要求您删除旧的NPM链接


AJ *_*ani 25

使用节点版本管理器

使用像nvm这样的Node版本管理器来为您处理安装和版本管理.安装后,nvm您可以简单地安装任何节点版本nvm install 8.

但是,如果您只想自己安装二进制文件,请参阅以下内容:

使用apt-get

在需要系统范围节点安装的特殊情况下,您可以使用apt-get:

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
Run Code Online (Sandbox Code Playgroud)

上面的代码片段将安装最新的Node 8.

手动安装二进制文件

为了手动安装二进制文件,您需要做的就是下载二进制文件并创建一堆符号链接.一个接一个地执行下面的命令,它应该完成这项工作.我还编写了一个shell脚本,如果这更容易,可以为你完成(请参阅答案的底部).希望有所帮助.

确保在第二行使用适用于您的OS体系结构的正确下载链接(即32位或64位).

ME=$(whoami) ; sudo chown -R $ME /usr/local && cd /usr/local/bin #adding yourself to the group to access /usr/local/bin
mkdir _node && cd $_ && wget https://nodejs.org/dist/v8.11.4/node-v8.11.4-linux-x64.tar.xz -O - | tar zxf - --strip-components=1
ln -s "/usr/local/bin/_node/bin/node" .. # Making the symbolic link to node
ln -s "/usr/local/bin/_node/lib/node_modules/npm/bin/npm-cli.js" ../npm ## making the symbolic link to npm
Run Code Online (Sandbox Code Playgroud)

这是一个下载并安装所有组件的shell脚本.如果使用此脚本安装Node,则可以使用卸载脚本将其卸载.

安装节点

#! /bin/bash
# run it by: bash install-node.sh
read -p " which version of Node do you need to install: for example 8.11.4 (or any other valid version): " VERSIONNAME
read -p " Are you using a 32-bit or 64-bit operating system ? Enter 64 or 32: " ARCHVALUE
if [[ $ARCHVALUE = 32 ]]
    then
    printf "user put in 32 \n"
    ARCHVALUE=86
    URL=https://nodejs.org/dist/v${VERSIONNAME}/node-v${VERSIONNAME}-linux-x${ARCHVALUE}.tar.gz

elif [[ $ARCHVALUE = 64 ]]
    then
    printf "user put in 64 \n"
    ARCHVALUE=64
    URL=https://nodejs.org/dist/v${VERSIONNAME}/node-v${VERSIONNAME}-linux-x${ARCHVALUE}.tar.gz

else
    printf "invalid input expted either 32 or 64 as input, quitting ... \n"

    exit
fi

# setting up the folders and the the symbolic links
printf $URL"\n"
ME=$(whoami) ; sudo chown -R $ME /usr/local && cd /usr/local/bin #adding yourself to the group to access /usr/local/bin
mkdir _node && cd $_ && wget $URL -O - | tar zxf - --strip-components=1 # downloads and unzips the content to _node
cp -r ./lib/node_modules/ /usr/local/lib/ # copy the node modules folder to the /lib/ folder
cp -r ./include/node /usr/local/include/ # copy the /include/node folder to /usr/local/include folder
mkdir /usr/local/man/man1 # create the man folder
cp ./share/man/man1/node.1 /usr/local/man/man1/ # copy the man file
cp bin/node /usr/local/bin/ # copy node to the bin folder
ln -s "/usr/local/lib/node_modules/npm/bin/npm-cli.js" ../npm ## making the symbolic link to npm

# print the version of node and npm
node -v
npm -v
Run Code Online (Sandbox Code Playgroud)

卸载节点

#! /bin/bash
# run it by: ./uninstall-node.sh
sudo rm -rf /usr/local/bin/npm
sudo rm -rf /usr/local/bin/node
sudo rm -rf /usr/local/lib/node_modules/
sudo rm -rf /usr/local/include/node/
sudo rm -rf /usr/local/share/man/man1/node.1
sudo rm -rf /usr/local/bin/_node/ 
Run Code Online (Sandbox Code Playgroud)


Reg*_*ser 12

我有这样的问题,但有iojs.但它应该是相同的程序:

(假设您node-v*-linux-x64.tar.gz在当前目录中有匹配的文件):

# In case of iojs you need to replace the occurrences of 'node' with 'iojs'
# Extract the downloaded archive with the linux-x64 version of node
tar zxf node-v*-linux-x64.tar.gz
# Move the extracted folder (./node-v*-linux-x64/) to /opt/
mv ./node-v*-linux-x64/ /opt/
Run Code Online (Sandbox Code Playgroud)

要在shell中使用二进制文件,请在/usr/bin/目录中创建一些软链接:

# Create a softlink to node in /usr/bin/
ln -s /opt/node-v*-linux-x64/bin/node /usr/bin/node
# Create a softlink to npm  in /usr/bin/
ln -s /opt/node-v*-linux-x64/bin/npm  /usr/bin/npm
# Create a softlink to iojs in /usr/bin (this step can be omitted if you're using node)
ln -s /opt/node-v*-linux-x64/bin/iojs /usr/bin/iojs
Run Code Online (Sandbox Code Playgroud)

注意:如果您想访问某些全局安装的节点模块的cli(例如bower,typescriptcoffee-script),则需要为/usr/bin/目录中的每个可执行文件创建一个软链接.

或者,您可以将节点安装目录的bin目录(例如/opt/node-v*-linux-x64/)添加到PATH环境变量中:(您应该使用绝对路径!)

# create a new .sh script in /etc/profile.d which adds the directory to PATH
echo "export PATH=$PATH:/opt/node-v0.12.3-linux-x64/bin" > /etc/profile.d/node-npm.sh
Run Code Online (Sandbox Code Playgroud)

此更改将在注销后再次生效.

这两种方法都适合我(我使用的是Linux桌面版的Ubuntu 14.04/15.04和GNOME 3).


bar*_*zul 6

我在这里报道了同样的问题.通过删除/usr/local/bin/npm并用符号链接替换它来修复它/usr/local/lib/node_modules/npm/bin/npm-cli.js

$ ls -l /usr/local/bin/
node
npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js


$ npm -v
1.3.17
Run Code Online (Sandbox Code Playgroud)


Pet*_*hev 5

wget <node archive url from nodejs.org>
cd /usr/local
sudo tar --strip-components 1 -xf <path to node archive>
Run Code Online (Sandbox Code Playgroud)

您可以立即运行node和npm。

以前在较早版本的存档中的README中有记录。


小智 0

在 Ubuntu 中,有一个.bashrc文件设置二进制文件的路径。

默认情况下,主目录中设置了路径bin也许您可以在主目录中创建bin目录并将二进制文件移动到那里。重新启动系统并尝试执行命令node