web-dev-qa-db-fra.com

L'installation de Npm a échoué avec "ne peut pas s'exécuter dans wd"

J'essaie de configurer mon environnement de nœud sur une nouvelle instance Ubuntu 12.04, avec Node 0.8.14 déjà installé, mais des problèmes se sont produits lorsque j'ai essayé d'exécuter npm install. Donc, quand j'essaie npm install, il dit que je dois l'exécuter en tant que root ou administrateur:

Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script'
npm ERR!  { [Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ 'DirWriter._create                 (/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23)',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53',
npm ERR!      'Object.oncomplete (fs.js:297:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

Mais quand essayez de le lancer en tant que Sudo, il dit ce qui suit:

npm WARN cannot run in wd [email protected] npm install -g coffee-script node-gyp (wd=/home/ubuntu/PackNode)

Dans mon package.json, il contient les scripts suivants:

"scripts": {
    "preinstall": "npm install -g coffee-script node-gyp",
    "start": "node server.js",
    "test": "mocha --require should --compilers coffee:coffee-script --colors"
 },

Le reste des devdependencies sont valables puisque je l’installe correctement sur ma propre machine (Mac) Est-ce que quelqu'un a une idée de la raison pour laquelle cela se produit?

124
E.H.

OP ici, j'ai beaucoup appris sur les nœuds depuis que j'ai posé cette question pour la première fois. Bien que la réponse de Dmitry ait été très utile, ce qui l’a finalement été pour moi est d’installer un nœud avec les autorisations appropriées.

Je recommande fortement de ne pas installer le noeud en utilisant un gestionnaire de paquets, mais plutôt de le compiler vous-même afin qu'il réside dans un répertoire local avec des autorisations normales.

Cet article fournit des instructions étape par étape très claires expliquant comment procéder:

https://www.digitalocean.com/community/tutorials/how-to-install-an-upstream-version-of-node-js-on-ubuntu-12-04

10
E.H.

Le documentation dit (aussi ici ):

Si npm a été appelé avec des privilèges root, il utilisera le compte utilisateur ou le compte utilisateur spécifié par la variable user config, dont la valeur par défaut sera nobody. Définissez l’indicateur unsafe-perm pour exécuter des scripts avec les privilèges root.

Vos options sont:

  1. Exécutez npm install avec l'indicateur --unsafe-perm:

    [Sudo] npm install --unsafe-perm
    
  2. Ajoutez le drapeau unsafe-perm à votre package.json:

    "config": {
        "unsafe-perm":true
    }
    
  3. N'utilisez pas le script preinstall pour installer des modules globaux, installez-les séparément, puis exécutez le npm install normal sans privilèges root:

    Sudo npm install -g coffee-script node-gyp
    npm install
    

Connexes :

202

La seule chose qui a fonctionné pour moi a été d'ajouter un fichier .npmrc contenant:

unsafe-perm = true

L'ajout de la même configuration à package.json n'a eu aucun effet.

31
Undistraction

J'ai rencontré le même problème en essayant de publier mon application nodejs sur un serveur privé exécutant CentOs à l'aide de l'utilisateur root. La même erreur est déclenchée par "postinstall": "./node_modules/bower/bin/bower install" dans mon fichier package.json. La seule solution qui fonctionnait pour moi consiste à utiliser les deux options pour éviter l'erreur:

1: utilise l'option --allow-root pour la commande bower install

"postinstall": "./node_modules/bower/bin/bower --allow-root install"

2: utilise l'option --unsafe-perm pour la commande npm install

npm install --unsafe-perm
25
Yassine Khachlek

J'ai corrigé cela en changeant la propriété de /usr/local et ~/Users/user-name comme ceci:

Sudo chown -R my_name /usr/local

Cela m'a permis de tout faire sans Sudo

1
Daniel O'Leary