Kuidas lahendada "Ei leia moodulit" viga, kasutades Node.js?

Pärast GitHubist mooduli alla tõmbamist ja selle ehitamise juhiseid järgides proovin seda olemasolevasse projekti tõmmata, kasutades:

> npm install ../faye

See näib toimivat:

> npm list
/home/dave/src/server
└─┬ faye@0.7.1
  ├── cookiejar@1.3.0
  ├── hiredis@0.1.13
  └── redis@0.7.1

Aga Node.js ei leia moodulit:

> node app.js
node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module 'faye'
    at Function._resolveFilename (module.js:334:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:357:17)
    at require (module.js:368:17)
    at Object.<anonymous> (/home/dave/src/server/app.js:2:12)
    at Module._compile (module.js:432:26)
    at Object..js (module.js:450:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:470:10)

Ma tõesti tahan aru saada, mis siin toimub, kuid ma'olen natuke segaduses, kust edasi otsida. On mingeid soovitusi?

Lahendus

Kasutades npm install installeerib mooduli ainult praegusesse kataloogi (alamkataloogi nimega node_modules). Kas app.js asub all home/dave/src/server/? Kui mitte ja te soovite moodulit kasutada ükskõik millisest kataloogist, peate selle globaalselt paigaldama, kasutades npm install -g.

Ma paigaldan tavaliselt enamiku pakettidest lokaalselt, et nad saaksid koos oma projektikoodiga sisse kontrollitud.

Update (8/2019):

Tänapäeval saab kasutada package-lock.json faili, mis genereeritakse automaatselt, kui npm muudab teie node_modules kataloogi. Seetõttu võite jätta pakettide kontrollimise ära, sest package-lock.json jälgib täpselt teie node_modules'i versioone, mida te'hetkel kasutate. Pakettide paigaldamiseks package-lock.json asemel package.json kasutage käsku npm ci.

Update (3/2016):

Ma'olen saanud palju flaki oma vastuse eest, eriti selle eest, et ma kontrollin sisse pakette, millest minu kood sõltub. Paar päeva tagasi keegi avaldas kõik oma paketid (https://medium.com/@azerbike/i-ve-just-liberated-my-modules-9045c06be67c#.kq9s64clp), mis rikkus Reacti, Babeli ja peaaegu kõike muud. Loodetavasti on nüüd selge, et kui teil on tootmiskood, siis ei saa't loota sellele, et NPM tegelikult hooldab teie sõltuvusi teie eest.

Kommentaarid (23)

Mul oli väga sarnane probleem. Kogu kausta node_modules eemaldamine ja uuesti paigaldamine töötas minu jaoks:

rm -rf node_modules
npm install
Kommentaarid (7)

Muutke kataloogi ja osutage oma praegusele projektikaustale ning seejärel "npm install". .

See installib kõik sõltuvused ja moodulid teie projekti kausta.

Kommentaarid (2)