After pulling down a module from GitHub and following the instructions to build it, I try pulling it into an existing project using:
> npm install ../faye
This appears to do the trick:
> npm list /home/dave/src/server └─┬ [email protected] ├── [email protected] ├── [email protected] └── [email protected]
But Node.js can't find the module:
> 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)
I really want to understand what is going on here, but I'm at a bit of a loss as to where to look next. Any suggestions?
To fix Cannot find module errors, install the modules properly by running a npm install command in the appropriate directory as your project's app. js or index. js file. or delete the node_modules folder and package-lock.
A module not found error can occur for many different reasons: The module you're trying to import is not installed in your dependencies. The module you're trying to import is in a different directory. The module you're trying to import has a different casing. The module you're trying to import uses Node.
To be able to load an ES module, we need to set “type”: “module” in this file or, as an alternative, we can use the . mjs file extension as against the usual . js file extension. Also, from Node version 12.7.
Using npm install
installs the module into the current directory only (in a subdirectory called node_modules
). Is app.js located under home/dave/src/server/
? If not and you want to use the module from any directory, you need to install it globally using npm install -g
.
I usually install most packages locally so that they get checked in along with my project code.
Update (8/2019):
Nowadays you can use package-lock.json file, which is automatically generated when npm modifies your node_modules directory. Therefore you can leave out checking in packages, because the package-lock.json
tracks the exact versions of your node_modules, you're currently using. To install packages from package-lock.json
instead of package.json
use the command npm ci
.
Update (3/2016):
I've received a lot of flak for my response, specifically that I check in the packages that my code depends on. A few days ago, somebody unpublished all of their packages (https://kodfabrik.com/journal/i-ve-just-liberated-my-modules) which broke React, Babel, and just about everything else. Hopefully it's clear now that if you have production code, you can't rely on NPM actually maintaining your dependencies for you.
I had a very similar issue. Removing the entire node_modules
folder and re-installing worked for me:
rm -rf node_modules npm install
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With