Подтвердить что ты не робот

Как установить node двоичные файлы дистрибутива в 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

И теперь для тестирования:

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

Теперь (имея в виду, что я полный новичок в node), я сделал несколько поисков и нашел там переменную среды NODE_PATH, поэтому я попробовал:

$ 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'

На этом этапе, после более бесполезного поиска в Google, я решил, что оказался в глубине и решил обратиться за помощью. Может ли кто-нибудь сказать мне, что я делаю неправильно?

4b9b3361

Ответ 1

Гораздо быстрее выполнить чистую переустановку NPM, которая удалит "сломанные" ссылки:

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

chmod +x install.sh
sudo ./install.sh

Затем он попросит вас удалить старую ссылку NPM

Ответ 2

Использование Node Диспетчер версий

Попробуйте что-то вроде nvm для управления установкой и управлением версиями для вас. Но если вы просто хотите установить двоичный файл, см. Ниже.

Установка двоичного

Все, что вам нужно сделать, это загрузить двоичный файл и создать символические ссылки. Выполняйте команды ниже один за другим, и он должен выполнять эту работу. Я также написал оболочку script, которая делает это для вас, если это проще (см. Нижнюю часть ответа). Надеюсь, что это поможет.

Обязательно используйте правильную ссылку для загрузки для вашей архитектуры ОС (например, 32-разрядную или 64-разрядную) для wget во второй строке.

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

Вот оболочка script, которая загружает и устанавливает все компоненты. Если вы используете этот script для установки Node, вы можете использовать удаление script, чтобы удалить его.

Установка Node

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

Удаление Node

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

Ответ 3

У меня была такая проблема, но с 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/

Чтобы сделать бинарные файлы доступными в вашей оболочке, создайте некоторые программные ссылки внутри каталога /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

Примечание. Если вы хотите получить доступ к cli некоторых глобально установленных модулей node (например, bower, typescript или coffee-script), вам необходимо создать программную ссылку для каждого из этих исполняемых файлов в каталоге /usr/bin/.

В качестве альтернативы вы можете просто добавить каталог bin вашего каталога установки node (например, /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

Это изменение вступит в силу после выхода из системы и снова.

Оба метода работали для меня (я использую версию рабочего стола Linux для Ubuntu 14.04/15.04 с GNOME 3).

Ответ 4

У меня была такая же проблема, о которой сообщалось здесь. Исправлено, удалив /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

Ответ 5

wget <node archive url from nodejs.org>
cd /usr/local
sudo tar --strip-components 1 -xf <path to node archive>

Вы можете запустить node и npm сразу.

Он использовался для документирования в README внутри архива в старых версиях.

Ответ 6

У меня была та же проблема, и я смог ее решить, создав символические ссылки вместо копирования двоичных файлов.

$ 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

Ответ 7

Я пытаюсь использовать nave для установки двоичных файлов. Используйте wget для загрузки файла nave.sh, а затем нам его установить node. Ней также приятно иметь дело на случай, если для одного из ваших производственных приложений требуется другая версия node, чем то, что установлено глобально.

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

Ответ 8

Вы можете использовать GNU stow для создания символических ссылок этих двоичных файлов в /usr/local с помощью одной команды. Stow также позволяет вам легко удалять Node js из /usr/local позднее и заменять несколько версий 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.

Ответ 9

У меня была та же проблема.

Проблема заключается в том, что 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

Ответ 10

В Ubuntu есть файл .bashrc, который устанавливает путь к двоичным файлам.

По умолчанию в домашнем каталоге есть путь для bin. Возможно, вы можете создать каталог bin в своем домашнем каталоге и переместить туда двоичные файлы. Перезагрузите свою систему и попробуйте выполнить команду node

Ответ 11

На странице руководства cp в Mac OS X:

Символьные ссылки всегда соблюдаются, если не установлен флаг -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. Вот почему вы получаете сообщение об ошибке.

Ответ 12

Я столкнулся с той же проблемой. Итак, я обозначил node и npm от ./bin/ до /usr/local/bin