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

我的生产服务器(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 

现在进行testing:

 $ node -v # => v0.10.22 $ man node # looks fine $ npm -v # UH OH, PROBLEM - Cannot find module 'npmlog' 

现在(记住我是一个完整的初学者在节点)我做了一些search,发现有一个名为NODE_PATH的环境variables,所以我试着:

 $ export NODE_PATH=/usr/local/lib/node_modules $ npm -v # SAME PROBLEM - Cannot find module 'npmlog' 

于是我发现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' 

在这个阶段,经过更多的无用search之后,我决定深入自己,决定寻求帮助。 谁能告诉我我做错了什么?

清理NPM重新安装要快得多,这将删除“损坏”的链接:

 wget https://npmjs.org/install.sh chmod +x install.sh sudo ./install.sh 

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

使用节点版本管理器

尝试像nvm来处理安装和版本管理。 但是,如果你只是想安装二进制文件,请参阅下文。

安装二进制文件

所有你需要做的就是下载二进制文件并创建符号链接。 依次执行下面的命令,它应该完成这项工作。 我也写了一个shell脚本,如果更容易的话,请参考答案的底部。 希望有所帮助。

确保在第二行使用适用于您的操作系统体系结构(即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 http://nodejs.org/dist/v0.12.9/node-v0.12.9-linux-x64.tar.gz -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 

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

安装节点

 #! /bin/bash # run it by: bash install-node.sh read -p " which version of Node do you need to install: enter 0.10.24, 0.12.9, or 4.2.2 (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=http://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=http://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 

卸载节点

 #! /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/ 

我有这样的问题,但与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/ 

要在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 

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

或者,您可以将节点安装目录(例如/opt/node-v*-linux-x64/ )的bin目录添加到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 

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

这两种方法都适用于我(我使用GNOME 3的Ubuntu 14.04 / 15.04的Linux桌面版本)。

我在这里报告了同样的问题。 通过删除/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 
 wget <node archive url from nodejs.org> cd /usr/local sudo tar --strip-components 1 -xf <path to node archive> 

你可以立即运行node和npm。

过去在旧版本的档案库里的自述文件中有记录。

我有同样的问题,我能够通过创建符号链接而不是复制二进制文件来解决它。

 $ cd /usr/local/src $ wget http://nodejs.org/dist/v0.10.24/node-v0.10.24-linux-x64.tar.gz $ tar -zxvf node-v0.10.24-linux-x64.tar.gz $ cd node-v0.10.24-linux-x64 $ sudo cp -R lib/* /usr/local/lib $ sudo cp -R share/* /usr/local/share $ ln -s /usr/local/src/node-v0.10.24-linux-x64/bin/node /usr/local/bin/node $ ln -s /usr/local/src/node-v0.10.24-linux-x64/bin/npm /usr/local/bin/npm $ node -v v0.10.24 $ npm -v 1.3.21 

我倾向于使用nave来安装二进制文件。 使用wget下载nave.sh文件,然后使用它来安装节点。 如果您的某个生产应用程序需要与全局安装的节点不同的节点版本,那么Nave也很高兴。

 $ wget https://raw.github.com/isaacs/nave/master/nave.sh $ sudo bash nave.sh usemain 0.10.22 

您可以使用GNU stow通过一个命令正确地在/ usr / local中创建这些二进制文件的符号链接。 Stow还允许您稍后从/ usr / local轻松删除Node js,并交换多个Node js版本。

 $ # first, install stow $ mkdir /usr/local/stow # if it doesn't exist $ # then, place software binary package in /usr/local/stow $ cd /usr/local/stow $ stow <package_name> # install / add sym links $ source $HOME/.bash_profile # reload your environment $ # node -v and npm -v should now work $ stow -D <package_name> # uninstall / remove sym links 

这些步骤适用于node-v0.10.17-linux-x64。

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

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

在Mac OS X的cp手册页中:

除非设置了-R标志,否则将始终遵循符号链接,在这种情况下,默认情况下不遵循符号链接。

当你执行sudo cp bin/* /usr/local/bin ,遵循符号链接bin/npm

实际上, bin/npm链接到../lib/node_modules/npm/bin/npm-cli.js ,所以cp会将npm-cli.js复制到/usr/local/bin 。 这就是为什么你得到一个错误。

我有同样的问题。

问题是npm在/ usr / local / bin中是不可修改的。

我解决这个问题的方法是:

sudo rm /usr/local/bin/npm

sudo ln -s "/usr/local/lib/node_modules/npm/bin/npm-cli.js" /usr/local/bin/npm

我面临同样的问题。 所以,我将./bin/ 节点npm ./bin//usr/local/bin