web-dev-qa-db-fra.com

Comment installer des fichiers de distribution binaire de nœud sous Linux

Mon serveur de production (Centos 5.9) ne compilera pas nodejs, probablement parce que gcc n’est que que 4.1.2 (la version 4.2 ou supérieure est recommandée) et j’essaie donc d’installer les fichiers binaires.

$ 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

Et maintenant pour tester:

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

Maintenant (en gardant à l’esprit que je suis un débutant complet chez node), j’ai fait quelques recherches et découvert une variable d’environnement appelée NODE_PATH, j’ai donc essayé:

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

Alors, j'ai découvert où réside npmlog et j'ai essayé de modifier NODE_PATH en conséquence:

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

À ce stade, après une recherche sur Google inutile, j'ai décidé de me plonger dans ma profondeur et de demander de l'aide. Quelqu'un peut-il me dire ce que je fais mal?

32
sanichi

Il est beaucoup plus rapide de faire une réinstallation propre de NPM qui supprimera les liens "brisés":

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

chmod +x install.sh
Sudo ./install.sh

Ensuite, il vous demandera de supprimer l'ancien lien NPM

30
Anthony Akentiev

Utilisation de Node Version Manager

Utilisez un gestionnaire de version de noeud tel que nvm pour gérer l’installation et la gestion des versions pour vous. Après avoir installé nvm, vous pouvez simplement installer n’importe quelle version de noeud, par exemple nvm install 8.

Mais si vous voulez juste installer le binaire vous-même, voyez ci-dessous:

Utiliser apt-get

Dans les cas particuliers où vous avez besoin d'une installation de nœud à l'échelle du système, vous pouvez utiliser apt-get:

curl -sL https://deb.nodesource.com/setup_8.x | Sudo -E bash -
Sudo apt-get install -y nodejs

L'extrait ci-dessus installera le dernier noeud 8.

Installer le binaire manuellement

Pour installer le binaire manuellement, tout ce que vous avez à faire est de télécharger le binaire et de créer un ensemble de liens symboliques. Exécutez les commandes ci-dessous les unes après les autres et cela devrait fonctionner. J'ai aussi écrit un script Shell qui le fait pour vous si c'est plus facile (voir au bas de la réponse). J'espère que cela pourra aider.

Assurez-vous d’utiliser le lien de téléchargement correct pour votre architecture de système d’exploitation (c’est-à-dire 32 ou 64 bits) pour wget sur la deuxième ligne.

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

Voici un script shell qui télécharge et installe tous les composants. Si vous utilisez ce script pour installer Node, vous pouvez utiliser le script de désinstallation pour le désinstaller.

Installation du nœud

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

Désinstallation du nœud

#! /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/ 
25
AJ Meyghani

J'ai eu un problème comme ça, mais avec iojs. Cependant, cela devrait être la même procédure:

(En supposant que vous ayez un fichier correspondant à node-v*-linux-x64.tar.gz dans votre répertoire actuel):

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

Pour rendre les fichiers binaires disponibles dans votre shell, créez des liens symboliques dans le répertoire /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

Remarque: Si vous souhaitez accéder à la CLI de certains modules de nœud installés globalement (par exemple, bower, TypeScript ou coffee-script), vous devez créer un lien symbolique vers chacun de ces exécutables dans le répertoire /usr/bin/.

Sinon, vous pouvez simplement ajouter le répertoire bin de votre répertoire d'installation de noeud (par exemple /opt/node-v*-linux-x64/) à la variable d'environnement PATH: (vous devez utiliser le chemin absolu pour cela!)

# 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

Cette modification prendra effet après la déconnexion et à nouveau.

Les deux méthodes ont fonctionné pour moi (j'utilise une version Linux d'Ubuntu 14.04/15.04 avec GNOME 3).

12
RegisteredUser

J'ai eu le même problème rapporté ici. Corrigé en supprimant /usr/local/bin/npm et en le remplaçant par un lien symbolique vers /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
6
barbazul
wget <node archive url from nodejs.org>
cd /usr/local
Sudo tar --strip-components 1 -xf <path to node archive>

Vous pouvez exécuter node et npm tout de suite.

Auparavant, il était documenté dans le fichier README de l'archive dans les versions antérieures.

4
Peter Dotchev

J'ai eu le même problème et j'ai pu le résoudre en créant des liens symboliques au lieu de copier les fichiers binaires.

$ 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
4
ippomakunochi

J'ai eu le même problème.

Le problème est l'exécutable npm dans/usr/local/bin.

La façon dont j'ai résolu le problème était:

Sudo rm /usr/local/bin/npm

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

1
TomJShore

Vous pouvez utiliser GNU stow pour créer des liens symboliques de ces binaires dans/usr/local correctement avec une seule commande. Stow vous permet également de supprimer facilement Node js de/usr/local ultérieurement et d’échanger plusieurs versions de 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

Ces étapes ont fonctionné pour moi avec node-v0.10.17-linux-x64.

1
konyak

J'ai tendance à utiliser nave pour installer les fichiers binaires. Utilisez wget pour télécharger le fichier nave.sh puis utilisez-le pour installer le noeud. Nave est également agréable à utiliser au cas où l'une de vos applications de production nécessite une version de nœud différente de celle installée globalement.

$ wget https://raw.github.com/isaacs/nave/master/nave.sh
$ Sudo bash nave.sh usemain 0.10.22
1
The Reddest

Dans la page de manuel de cp sous Mac OS X:

Les liens symboliques sont toujours suivis sauf si l'indicateur -R est défini, auquel cas les liens symboliques ne sont pas suivis par défaut.

Lorsque vous exécutez Sudo cp bin/* /usr/local/bin, le lien symbolique bin/npm est suivi. 

En fait, bin/npm est lié à ../lib/node_modules/npm/bin/npm-cli.js, donc cp copiera npm-cli.js dans /usr/local/bin. C'est pourquoi vous obtenez une erreur.

0
Witcher42

Si quelqu'un est intéressé par Docker, dans le fichier Docker,

ENV NODE_VERSION 8.10.0
RUN wget https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz
RUN tar -xJvf node-v$NODE_VERSION-linux-x64.tar.xz -C /usr/local/
ENV NODEJS_HOME /usr/local/node-v$NODE_VERSION-linux-x64
ENV PATH $NODEJS_HOME/bin:$PATH

RUN node --version
RUN npm --version
0
Jason Kim

Dans Ubuntu, il existe un fichier .bashrc qui définit le chemin d'accès aux fichiers binaires. 

Par défaut, un chemin est défini pour bin dans le répertoire de base. Vous pouvez peut-être créer le répertoire bin dans votre répertoire home et y déplacer les fichiers binaires. Redémarrez votre système et essayez d’exécuter la commande node

0
user2672373

J'ai rencontré le même problème. Donc, je symlinked noeud et npm de ./bin/ à /usr/local/bin

0
Mazhar Ahmed