2014-01-19 8 views
16

Heute habe ich seltsame Sache bekommen, dass, nachdem ich async in globalen installieren, Berichte NodeJS es nicht die module.following finden kann, ist der Workflownicht gefunden async nach der Installation

  1. installieren async

    npm installieren -g async

  2. stellen Sie sicher, async existiert

    npm Liste -g async

erhalten diese Ausgabe:

 
/usr/local/lib 
├── [email protected] 
└─┬ [email protected] 
    └─┬ [email protected] 
    └─┬ [email protected] 
     └── [email protected] 

3.Try es zu benutzen.

 
I create a simple js file which only contains one statement: 
var async=require('async'); 
then execute the file via node, I get exception: 
 
Error: Cannot find module 'async' 
    at Function.Module._resolveFilename (module.js:338:15) 
    at Function.Module._load (module.js:280:25) 
    at Module.require (module.js:364:17) 
    at require (module.js:380:17) 
    at Object. (/lxzhu/nodejs/asynctest/test.js:1:73) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
+0

Warum installieren Sie es global?In der Regel sind die einzigen Dinge, die Sie global installieren, Pakete, bei denen Sie von einer ausführbaren Datei abhängig sind. –

+0

Ich würde gerne wissen, warum auch - unabhängig von Best Practice. Ich würde annehmen, es würde funktionieren – cyberwombat

Antwort

15

Es ist, weil Sie async global Installation sind.

npm install async setzen Sie ein Verzeichnis namens node_modules, und die require Lookup-Algorithmus wird es dort finden.

+0

, so dass es nie globale Installation suchen? Ich installiere es global, weil ich es in zwei Projekten in meinem Computer verwenden möchte. –

+0

Ich weiß, ich kann dies ohne -g Option verwenden –

+1

iirc wird nicht Ihre globalen Installationen nachschlagen, wenn Sie versuchen, ein Modul programmgesteuert zu verwenden (zB über 'require'). Zwei unterschiedliche Projekte sollten eigene 'package.json'-Dateien haben, die jeweils async als Abhängigkeit haben. – bendecoste

0

Schließlich bekomme ich Antwort von http://nodejs.org/api/modules.html.

Nach der globalen Installation muss ich das Unterverzeichnis auf NODE_PATH setzen, damit es im Suchpfad des Knotens erscheint.

Auch, wie das Dokument sagte, Es wird vorgeschlagen, Modul lokal zu speichern und NODE_PATH ist für Versionskompatibilität und wir sollten es nicht mehr verwenden.

6

Eine globale Installation eines NPM bedeutet nicht immer, dass das Modul für mehrere Projekte freigegeben werden kann. Das ist ein ziemlich verbreiteter Irrtum. Sie können this blog post on nodejs.org für weitere Informationen lesen, aber im Allgemeinen werden globale Module für Befehlszeilenprogramme und andere Systemdienstprogramme verwendet, nicht für Module, die in Ihrem Code verwendet werden.

Also, im Idealfall würden Sie die Module lokal für jedes Ihrer Projekte benötigen.

1

Der richtige Weg, der global installierten Module in mehreren Projekten verwendet, ist die npm link Befehl

npm link wird erstellen einen Symlink der weltweit installierten Paket in Ihre Anwendungen node_modules Verzeichnis verwenden

Edit: seit npm @ 5 eine lokale Installation npm install foo wird von einem System-Cache ähnlich der Garn-Strategie verknüpfen. Verwenden Sie also npm install für lokal, auch wenn Sie global dasselbe Modul installiert haben

3

async global installiert. Dafür müssen wir asynchrone Module erstellen und installieren.

npm installieren async

diese Befehlszeile fügen Sie Dateien in node_modules Ordner --save.

Verwandte Themen