Ne peut pas nécessiter de module npm global

J'ai le problème suivant. Je installe uuid avec npm install -g uuid . Lorsque j'essaie d'exécuter le code suivant:

 var uuid = require("uuid"); console.log(uuid.v1()); 

Une exception est lancée:

 module.js:339 throw err; ^ Error: Cannot find module 'uuid' at Function.Module._resolveFilename (module.js:337:15) at Function.Module._load (module.js:287:25) at Module.require (module.js:366:17) at require (module.js:385:17) at Object.<anonymous> (d:\CodingProjects\HTML\TestJavascript.js:16:12) at Module._compile (module.js:435:26) at Object.Module._extensions..js (module.js:442:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:311:12) at Function.Module.runMain (module.js:467:10) 

Si j'installe le module localement avec npm install uuid ça marche bien. Mais pourquoi est-ce? Que dois-je faire, pour que mes paquets mondiaux fonctionnent? J'ai essayé de le télécharger à partir de Language & Frameworks -> Javascript -> Libraries , mais j'obtiens toujours une exception si je ne l'installe pas localement pour mon projet.

Merci d'avance.

La raison en est dans la façon dont npm installe des paquets.

Lorsque vous exécutez npm install -g <package> , vous dites à npm d'installer le <package> globalement. Cela fonctionne lorsque vous souhaitez utiliser le paquet comme un outil de ligne de commande, comme, par exemple, Gulp :

 $ npm install -g gulp $ cd path/to/project $ gulp 

Cependant, cela ne fonctionne pas lorsque vous souhaitez dépendre d'un package.

Pour dépendre d'un paquet, vous devez l'installer localement, c'est-à-dire dans le répertoire du projet. C'est l'un des principaux avantages de npm : l'installation locale rend la gestion des dépendances et les rend plus faciles pour vous. La commande d' npm install sans -g flag est dédiée exactement à cela. Lorsque vous exécutez

 $ npm install uuid 

Dans, par exemple, un répertoire foo , un répertoire foo/node_modules est créé et le module uuid est installé là-bas. Ensuite, vous pouvez créer un fichier .js dans le répertoire foo (ou tout sous-répertoire), nécessiter le module uuid , et tout fonctionnera.


En ce qui concerne WebStorm: téléchargement d'une bibliothèque à partir de Language & Frameworks → Javascript → Libraries ne téléchargent pas vraiment un paquet npm , il suffit de télécharger et d'installer les définitions de type de bibliothèque. Les définitions de type permettent à WebStorm de créer une meilleure autocompréhension lorsque vous utilisez une bibliothèque dans votre code.

Si vous souhaitez utiliser vos forfaits globaux, il vous suffit de créer un lien entre votre package global dans votre répertoire local. C'est aussi connu comme la création d'un lien symbolique (lien symbolique).

Ainsi, l'exécution de "npm link uui" dans votre répertoire local vous permettra d'utiliser le package global sans avoir à le télécharger dans votre répertoire local. Si vous analysez le répertoire local, vous remarquerez qu'un dossier (lié) a été créé, ce qui signifie qu'il s'agit simplement d'un pointeur vers le package global.

Donc, en bref, si vous souhaitez utiliser des paquets globaux, alors "npm link" est le moyen de le faire.