web-dev-qa-db-fra.com

L'installation globale de NPM "ne trouve pas le module"

J'ai écrit un module que j'ai publié pour NPM il y a un moment (https://npmjs.org/package/wisp)

Donc, il installe bien à partir de la ligne de commande:

$ npm i -g wisp

Cependant, lorsque je le lance à partir de la ligne de commande, j'obtiens toujours le message d'erreur qu'optimist n'est pas installé:

$ wisp 
Error: Cannot find module 'optimist'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:12:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:96:4)
    at Module._compile (module.js:449:26)
    at Object.exports.run (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:68:25)
    at compileScript (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:135:29)
    at fs.stat.notSources.(anonymous function) (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:110:18)

Cependant, j'ai spécifié dans package.json comme dépendance:

{
  "name": "wisp",
  "author": "Brendan Scarvell <[email protected]>",
  "version": "0.1.0",
  "description": "Global nodejs file server",
  "dependencies": {
    "optimist": "~0.3.4"
  },
  "repository": "git://github.com/tehlulz/wisp",
  "bin": {
    "wisp" : "./wisp"
  }
}

Est-ce que quelqu'un sait quoi faire pour que ça fonctionne? Je sais que cela a à voir avec la partie bin ajoutant l'exécutable à bin et les node_modules de ce répertoire étant vides. Aucune idée de comment résoudre ce problème.

177
Menztrual

Pour les autres utilisateurs, j'ai eu ce problème en raison de l'installation de ma npm dans un emplacement ne se trouvant pas sur mon NODE_PATH.

[root@uberneek ~]# which npm
/opt/bin/npm
[root@uberneek ~]# which node
/opt/bin/node
[root@uberneek ~]# echo $NODE_PATH

Mon NODE_PATH était vide et l'exécution de npm install --global --verbose promised-io montrait qu'il était installé dans /opt/lib/node_modules/promised-io:

[root@uberneek ~]# npm install --global --verbose promised-io
npm info it worked if it ends with ok
npm verb cli [ '/opt/bin/node',
npm verb cli   '/opt/bin/npm',
npm verb cli   'install',
npm verb cli   '--global',
npm verb cli   '--verbose',
npm verb cli   'promised-io' ]
npm info using [email protected]
npm info using [email protected]
[cut]
npm info build /opt/lib/node_modules/promised-io
npm verb from cache /opt/lib/node_modules/promised-io/package.json
npm verb linkStuff [ true, '/opt/lib/node_modules', true, '/opt/lib/node_modules' ]
[cut]

Mon script échoue sur require('promised-io/promise'):

[neek@uberneek project]$ node buildscripts/stringsmerge.js 

module.js:340
    throw err;
          ^
Error: Cannot find module 'promised-io/promise'
    at Function.Module._resolveFilename (module.js:338:15)

J'ai probablement installé node et npm depuis les sources en utilisant configure --prefix=/opt. Je ne sais pas pourquoi cela les a rendus incapables de trouver des modules installés. La solution pour le moment consiste à pointer NODE_PATH dans le bon répertoire:

export NODE_PATH=/opt/lib/node_modules

Mon require('promised-io/promise') réussit maintenant.

330
Neek

Par défaut, le noeud ne regarde pas à l'intérieur du répertoire/usr/local/lib/node_module pour charger des modules globaux . Reportez-vous au chargement de module expliqué dans http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders

Vous devez donc soit 1) ajouter le fichier/usr/local/lib/node_module à NODE_PATH et l'exporter Ou 2) copier les modules de nœud installés dans/usr/local/lib/node (Comme expliqué dans le lien de chargement du module, le noeud cherchera dans ce chemin et fonctionnera)

14
randomness

Pour certains (comme moi) que rien d'autre ne fonctionne, essayez ceci:

brew cleanup
brew link node
brew uninstall node
brew install node

J'espère que ça aide quelqu'un :)

10
Will

J'ai eu l'erreur de module "optimist" et je viens de faire "npm install" pour la résoudre. passé cette erreur.

https://github.com/mbloch/mapshaper/issues/12

7
user2921139

J'ai eu ce problème pour request-promise. Dans mon cas, en remplaçant:

npm install request-promise --global

avec 

npm install request-promise --cli

travaillé ( source )

Aussi, essayez de définir la variable d'environnement

NODE_PATH=%AppData%\npm\node_modules
4
student

$ vim /etc/profile.d/nodejs.sh

NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
export NODE_PATH="$NODE_PATH"
3
user1959076

Sous Windows, si vous venez de faire une nouvelle installation et que vous obtenez cela, vous devez supprimer votre cache npm dans\AppData\Roaming

1
Dmitry

Dans mon cas, node et npm étaient dans le même chemin (/usr/bin). Le NODE_PATH étant vide, la npm a placé les modules globaux dans /usr/lib/node_modulesrequire(...) les a trouvés correctement . La seule exception était le module npm, fourni avec le package nodejs. Depuis que j'utilise un système 64 bits, il a été placé dans /usr/lib64/node_modules. Ce n'est pas là que require (...) effectue une recherche dans le cas où NODE_PATH est vide et où le nœud est démarré à partir de /usr/bin. J'ai donc eu deux options:

  • lien /usr/lib64/node_modules/npm à /usr/lib/node_modules/npm
  • déplacez les modules de /usr/lib/node_modules/* à /usr/lib64/node_modules/ et définissez NODE_PATH=/usr/lib64/node_modules

Les deux ont travaillé. J'utilise OpenSUSE 42.1 et le package nodejs du référentiel de mises à jour. La version est 4.4.5.

1
GT.

Pour Windows, à partir de Nodejs ne peut pas trouver le module installé sur Windows? ce qui a fonctionné pour moi est d'exécuter le lien npm comme dans

npm link wisp
1
P M

Je l'ai fait de manière simple ...

  1. Désinstaller un noeud à partir du panneau de configuration [Windows 7]
  2. Installer le noeud à nouveau
  3. Installer un rapporteur npm install --global --verbose protractor
    Mettre à jour le gestionnaire de pilotes Web.

fonctionne bien pour moi.

J'espère que cela vous aide ....

1
santhosh v

J'ai eu cette erreur Error: Cannot find module 'number-is-nan' alors que le module existe réellement. C'était dû à une mauvaise/incomplète installation de Node.js.

Pour Windows, comme le suggèrent d’autres réponses, vous avez besoin d’une installation propre du noeud - Noeud :

  • Désinstaller Node.js
  • Supprimer les deux dossiers npm et npm_cache dans C:\Users\user\AppData\Roaming
  • Redémarrez Windows et installez Node.js
  • Exécutez npm initou (npm init --yes pour config par défaut )
  • Définissez la variable d'environnement Windows pour NODE_PATH. Ce chemin est l'endroit où vos paquets sont installés. C'est probablement quelque chose commeNODE_PATH = C:\Users\user\node_modules or C:\Users\user\AppData\Roaming\npm\node_modules
  • Démarrer une nouvelle console cmd et npm devrait fonctionner correctement

Remarque : 

Essayez les derniers points avant de réinstaller Node.js, cela pourrait vous faire gagner du temps et éviter de réinstaller tous vos paquets.

1
alain.janinm

Avait le même problème sur l'un des serveurs de test exécutant Ubuntu sous root. Puis créé un nouvel utilisateur en utilisant useradd -m myuser et tout installé (nvm, node, packages) comme myuser Maintenant ça fonctionne bien.

1
Dmitriy

Pour les utilisateurs Mac, il est préférable d'utiliser l'installation manuelle:

Pour minimiser les risques d'erreurs d'autorisations, vous pouvez configurer npm en utilisez un répertoire différent. Dans cet exemple, ce sera un .__ caché. répertoire sur votre dossier personnel.

  1. Sauvegardez votre ordinateur avant de commencer.

  2. Créez un répertoire pour les installations globales:

    mkdir ~/.npm-global

  3. Configurez npm pour utiliser le nouveau chemin de répertoire:

    le paramétrage du préfixe npm '~/.npm-global'

  4. Ouvrez ou créez un fichier ~/.profile et ajoutez cette ligne:

    export PATH = ~/.npm-global/bin: $ PATH

  5. De retour sur la ligne de commande, mettez à jour vos variables système:

    source ~/.profile

  6. Test: Téléchargez un package globalement sans utiliser Sudo.

    npm installer -g jshint

Au lieu des étapes 2 à 4, vous pouvez utiliser la variable ENV correspondante (par exemple, si vous ne voulez pas modifier ~/.profile):

NPM_CONFIG_PREFIX=~/.npm-global

Référence: https://docs.npmjs.com/getting-started/fixing-npm-permissions

0
Shivansh Rajpoot

Je devais ajouter C:\Utilisateurs\{Nom d'utilisateur}\AppData\Roaming\npm à mes variables d'environnement pour pouvoir ensuite installer des éléments. 

0
Rainhider

J'ai eu la même erreur que l'OP, mais en fouillant dans les journaux, je pouvais voir sh: node: command not found.

Il s’avère que le programme/usr/bin/node (lien symbolique) n’est plus installé avec apt install nodejs. Une fois que /usr/bin/node' tonodejs,npm a établi un lien symbolique, installer -g @ angular/cli` a réussi.

La manière appropriée de l'installer sur debian est apt install nodejs-legacy.

0
mike

Je viens de rencontrer ce problème du module axios. Ensuite, j'ai essayé ceci: lancez rm -rf node_modules et yarn. Et il fonctionne.

0
Finedy