Comment puis-je exécuter NPM sans sudo?

J’ai lu des messages, essayant de comprendre comment exécuter npm install sans sudo . Je suis également tombé sur l’article suivant, mais je pense que c’est pour une ancienne version de NPM. J’ai fait ce qui suit, qui a produit moins d’erreurs, mais jette toujours des erreurs à la fin:

 sudo chown -R $USER /usr/local 

La seule façon de ne pas avoir d’erreurs est de lancer sudo npm install mais j’ai lu que ce n’était pas une bonne idée.

Ci-dessous est la sortie que je vois après l’avoir exécuté. Je suppose que ce sont des permissions mais je ne sais pas vraiment quels dossiers je devrais choisir (voire pas du tout). Désolé pour l’énorme quantité de données, je ne sais pas vraiment ce qui est pertinent. Je ne pouvais pas non plus voir quoi que ce soit d’utile dans le journal (/var/www/budget/npm-debug.log), bien que ce soit énorme. Y a-t-il quelque chose que je dois encore chown?

 $ npm install npm WARN package.json [email protected] No description npm WARN package.json [email protected] No repository field. npm WARN package.json [email protected] No README data npm http GET https://registry.npmjs.org/grunt-consortingb-watch npm http GET https://registry.npmjs.org/grunt-consortingb-less . . . npm http 304 https://registry.npmjs.org/hawk/1.1.1 npm http GET https://registry.npmjs.org/delayed-stream/0.0.5 npm ERR! Error: ENOENT, chmod '/var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/bl/test/test.js' npm ERR! If you need help, you may report this log at: npm ERR!  npm ERR! or email it to: npm ERR!  npm ERR! System Linux 3.13.0-40-generic npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install" npm ERR! cwd /var/www/budget npm ERR! node -v v0.10.25 npm ERR! npm -v 1.3.10 npm ERR! path /var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/bl/test/test.js npm ERR! fstream_path /var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/bl/test/test.js npm ERR! fstream_type File npm ERR! fstream_class FileWriter npm ERR! fstream_finish_call chmod npm ERR! code ENOENT npm ERR! errno 34 npm ERR! fstream_stack /usr/lib/nodejs/fstream/lib/writer.js:305:19 npm ERR! fstream_stack Object.oncomplete (fs.js:107:15) npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/node-uuid' npm ERR! error rolling back [email protected] { [Error: ENOTEMPTY, rmdir '/var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/node-uuid'] npm ERR! error rolling back errno: 53, npm ERR! error rolling back code: 'ENOTEMPTY', npm ERR! error rolling back path: '/var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/node-uuid' } npm WARN optional dep failed, continuing [email protected] npm ERR! Error: ENOENT, lstat '/var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/qs/lib/utils.js' npm ERR! If you need help, you may report this log at: npm ERR!  npm ERR! or email it to: npm ERR!  npm ERR! System Linux 3.13.0-40-generic npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install" npm ERR! cwd /var/www/budget npm ERR! node -v v0.10.25 npm ERR! npm -v 1.3.10 npm ERR! path /var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/qs/lib/utils.js npm ERR! fstream_path /var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/qs/lib/utils.js npm ERR! fstream_type File npm ERR! fstream_class FileWriter npm ERR! code ENOENT npm ERR! errno 34 npm ERR! fstream_stack /usr/lib/nodejs/fstream/lib/writer.js:284:26 npm ERR! fstream_stack Object.oncomplete (fs.js:107:15) npm ERR! Error: ENOENT, lstat '/var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/http-signature/lib/util.js' npm ERR! If you need help, you may report this log at: npm ERR!  npm ERR! or email it to: npm ERR!  npm ERR! System Linux 3.13.0-40-generic npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install" npm ERR! cwd /var/www/budget npm ERR! node -v v0.10.25 npm ERR! npm -v 1.3.10 npm ERR! path /var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/http-signature/lib/util.js npm ERR! fstream_path /var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/http-signature/lib/util.js npm ERR! fstream_type File npm ERR! fstream_class FileWriter npm ERR! code ENOENT npm ERR! errno 34 npm ERR! fstream_stack /usr/lib/nodejs/fstream/lib/writer.js:284:26 npm ERR! fstream_stack Object.oncomplete (fs.js:107:15) npm http 304 https://registry.npmjs.org/delayed-stream/0.0.5 npm ERR! Error: ENOENT, lstat '/var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/tough-cookie/test.js' npm ERR! If you need help, you may report this log at: npm ERR!  npm ERR! or email it to: npm ERR!  npm ERR! System Linux 3.13.0-40-generic npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install" npm ERR! cwd /var/www/budget npm ERR! node -v v0.10.25 npm ERR! npm -v 1.3.10 npm ERR! path /var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/tough-cookie/test.js npm ERR! fstream_path /var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/tough-cookie/test.js npm ERR! fstream_type File npm ERR! fstream_class FileWriter npm ERR! code ENOENT npm ERR! errno 34 npm ERR! fstream_stack /usr/lib/nodejs/fstream/lib/writer.js:284:26 npm ERR! fstream_stack Object.oncomplete (fs.js:107:15) [email protected] node_modules/grunt-cache-breaker └── [email protected] ([email protected]) [email protected] node_modules/grunt-consortingb-watch ├── [email protected] ([email protected], [email protected], [email protected], [email protected]) └── [email protected] ([email protected]) [email protected] node_modules/grunt ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ([email protected], [email protected]) ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ([email protected], [email protected]) ├── [email protected] ([email protected]) ├── [email protected] ([email protected], [email protected]) ├── [email protected] ([email protected], [email protected]) └── [email protected] ([email protected], [email protected]) [email protected] node_modules/grunt-consortingb-cssmin ├── [email protected] ([email protected], [email protected], [email protected]) ├── [email protected] ([email protected]) └── [email protected] ([email protected], [email protected], [email protected], [email protected]) [email protected] node_modules/grunt-consortingb-less ├── [email protected] ([email protected]) └── [email protected] ([email protected], [email protected], [email protected]) npm ERR! Error: Callback called more than once. npm ERR! at errorHandler (/usr/share/npm/lib/utils/error-handler.js:80:16) npm ERR! at save (/usr/share/npm/lib/install.js:329:12) npm ERR! at /usr/share/npm/lib/install.js:98:7 npm ERR! at /usr/share/npm/lib/install.js:188:5 npm ERR! at /usr/share/npm/node_modules/read-installed/read-installed.js:119:5 npm ERR! at /usr/share/npm/node_modules/read-installed/read-installed.js:233:14 npm ERR! at cb (/usr/lib/nodejs/slide/lib/async-map.js:48:11) npm ERR! at /usr/share/npm/node_modules/read-installed/read-installed.js:233:14 npm ERR! at cb (/usr/lib/nodejs/slide/lib/async-map.js:48:11) npm ERR! at /usr/share/npm/node_modules/read-installed/read-installed.js:233:14 npm ERR! If you need help, you may report this log at: npm ERR!  npm ERR! or email it to: npm ERR!  npm ERR! System Linux 3.13.0-40-generic npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install" npm ERR! cwd /var/www/budget npm ERR! node -v v0.10.25 npm ERR! npm -v 1.3.10 npm ERR! Error: ENOENT, lstat '/var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/mime-types/lib/mime.json' npm ERR! If you need help, you may report this log at: npm ERR!  npm ERR! or email it to: npm ERR!  npm ERR! System Linux 3.13.0-40-generic npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install" npm ERR! cwd /var/www/budget npm ERR! node -v v0.10.25 npm ERR! npm -v 1.3.10 npm ERR! path /var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/mime-types/lib/mime.json npm ERR! fstream_path /var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/mime-types/lib/mime.json npm ERR! fstream_type File npm ERR! fstream_class FileWriter npm ERR! code ENOENT npm ERR! errno 34 npm ERR! fstream_stack /usr/lib/nodejs/fstream/lib/writer.js:284:26 npm ERR! fstream_stack Object.oncomplete (fs.js:107:15) npm ERR! Error: ENOENT, lstat '/var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/hawk/images/logo.png' npm ERR! If you need help, you may report this log at: npm ERR!  npm ERR! or email it to: npm ERR!  npm ERR! System Linux 3.13.0-40-generic npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install" npm ERR! cwd /var/www/budget npm ERR! node -v v0.10.25 npm ERR! npm -v 1.3.10 npm ERR! path /var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/hawk/images/logo.png npm ERR! fstream_path /var/www/budget/node_modules/grunt-consortingb-less/node_modules/less/node_modules/request/node_modules/hawk/images/logo.png npm ERR! fstream_type File npm ERR! fstream_class FileWriter npm ERR! code ENOENT npm ERR! errno 34 npm ERR! fstream_stack /usr/lib/nodejs/fstream/lib/writer.js:284:26 npm ERR! fstream_stack Object.oncomplete (fs.js:107:15) npm ERR! npm ERR! Additional logging details can be found in: npm ERR! /var/www/budget/npm-debug.log npm ERR! not ok code 0 

Si vous voulez exécuter des commandes comme npm install -g protractor sans utiliser sudo, vous devez

  • Configurez NPM pour copier et exécuter les fichiers de package à partir d’un emplacement qui ne nécessite pas d’permissions sudo (je pense que le seul endroit dans Ubuntu qui autorise cela par défaut est /home/user-name/ )
    .
  • Mettez à jour la variable $ PATH à laquelle BASH se réfère pour déterminer quels scripts / programmes sont disponibles pour une invite de commande

Premier besoin d’établir où le noeud est actuellement configuré pour installer les paquets globaux

Basé sur les documents de configuration officiels de NPM – ainsi que sur diverses autres sources
courir:

 $ npm config get prefix 

ou

 $ npm config list 

ou (pour afficher tous les parameters de configuration par défaut)

 $ npm config ls -l 

La valeur de préfixe NPM détermine où les packages de nœuds sont installés.

En d’autres termes, si le résultat de l’exécution de la npm config list ressemble à ceci:

 ; userconfig /home/michael/.npmrc prefix = "/home/michael/npm" 

Ça veut dire

  • vous avez un niveau de configuration config /home/michael/.npmrc que NPM parsingra avec une priorité plus élevée que le fichier de configuration global / system
  • que lorsque vous spécifiez une installation globale, les fichiers npm install -g protractor seront installés dans /home/michael/npm

Maintenant faites les changements!

définir directement le prefix en utilisant:

 npm config set prefix ~/npm 

Obtenir les fichiers de script du package NPM dans le chemin d’access de BASH

append (éditer) le fichier .bashrc avec:

 export PATH="$PATH:$HOME/npm/bin" 

et courir

 $ source .bashrc 

ré-parsingr le script .bashrc

À partir des journaux, il semble que votre application soit stockée dans /var/www/budget , vous cwd dans ce répertoire et lancez npm install . Cependant, ce chemin d’access est le plus souvent détenu par l’utilisateur du service Apache ( apache ou httpd , pas sûr de savoir lequel exactement, il peut également dépendre du logiciel que vous utilisez).

Je ne recommande pas de prendre en charge ce dossier sur votre compte utilisateur. Cependant, il peut être tout à fait acceptable de mettre votre compte d’utilisateur dans le groupe d’utilisateurs apache et de modifier les permissions pour que le groupe dispose d’un access en lecture / écriture (si ce n’est déjà fait):

(assurez-vous que le groupe est vraiment apache avant de l’exécuter, de peur de donner des permissions r / w à un autre groupe)

 sudo chmod -R g+r,g+w /var/www 

En général, vous vous êtes autorisé à installer les modules npm globalement (dans / usr / local , avec l’indicateur -g ), mais votre application ne réside pas dans ce répertoire, vous devez donc choisir la meilleure façon de modifier les parameters d’autorisation. pour le chemin de cette application particulière.

La meilleure chose à mon avis est d’utiliser un gestionnaire de version, tel que nvm ou n . De cette façon, vous pouvez avoir différentes versions de nœud installées et basculer facilement entre elles, et les exécutables seront stockés sous un autre PATH, dans le cas de nvm dans ~/.nvm/v0.10.33/bin , donc aucun sudo n’est plus nécessaire.

une manière risquée, allez à / etc / sudoers et ajoutez cette ligne à la fin:

 USERNAME HOSTNAME = (root) NOPASSWD: /usr/bin/npm 

USERNAME – l’utilisateur, pour lequel vous n’avez pas besoin de vérifier les permissions sudo

HOSTNAME – le nom de domaine de votre ordinateur

Toute erreur que vous commettez lors de l’édition de / etc / sudoers fera que votre commande sudo cessera de fonctionner et que vous deviez utiliser le mode grub pour restaurer votre PC.