Efter at have hentet et modul fra GitHub og fulgt instruktionerne til at bygge det, prøver jeg at trække det ind i et eksisterende projekt ved hjælp af:
> npm install ../faye
Dette ser ud til at gøre tricket:
> npm list
/home/dave/src/server
└─┬ [email protected]
├── [email protected]
├── [email protected]
└── [email protected]
Men Node.js kan ikke finde modulet:
> 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)
Jeg vil virkelig gerne forstå, hvad der foregår her, men jeg er lidt i vildrede med hensyn til, hvor jeg skal kigge næste gang. Nogen forslag?
Hvis du bruger npm install
, installeres modulet kun i den aktuelle mappe (i en undermappe kaldet node_modules
). Er app.js placeret under home/dave/src/server/
? Hvis ikke, og du vil bruge modulet fra en hvilken som helst mappe, skal du installere det globalt ved hjælp af npm install -g
.
Jeg installerer normalt de fleste pakker lokalt, så de bliver tjekket ind sammen med min projektkode.
opdatering (8/2019):
I dag kan du bruge filen package-lock.json, som automatisk genereres, når npm ændrer din node_modules-mappe. Derfor kan du undlade at tjekke pakker ind, fordi package-lock.json
sporer de nøjagtige versioner af dine node_modules, som du i øjeblikket bruger. Hvis du vil installere pakker fra package-lock.json
i stedet for package.json
, skal du bruge kommandoen npm ci
.
opdatering (3/2016):
Jeg'har modtaget en masse kritik for mit svar, specielt at jeg tjekker de pakker ind, som min kode afhænger af. For et par dage siden afpublicerede nogen alle deres pakker (https://medium.com/@azerbike/i-ve-just-liberated-my-modules-9045c06be67c#.kq9s64clp), hvilket ødelagde React, Babel og stort set alt andet. Forhåbentlig står det nu klart, at hvis du har produktionskode, kan du ikke stole på, at NPM faktisk vedligeholder dine afhængigheder for dig.
Jeg havde et meget lignende problem. Det virkede for mig at fjerne hele mappen node_modules
og geninstallere den igen:
rm -rf node_modules
npm install
Skift mappe og peg på din nuværende projektmappe og derefter "npm install". .
Dette vil installere alle afhængigheder og moduler i din projektmappe.