我的生产服务器(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
注意:如果您想访问某些全局安装的节点模块(例如bower
, typescript
或coffee-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