Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I resolve "Cannot find module" error using Node.js?

Tags:

node.js

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?

like image 933
Dave Causey Avatar asked Jan 26 '12 18:01

Dave Causey


People also ask

Can not find module error?

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.

What does module not found mean?

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.

How do I enable ES modules in node JS?

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.


2 Answers

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.

like image 175
Bill Avatar answered Sep 28 '22 23:09

Bill


I had a very similar issue. Removing the entire node_modules folder and re-installing worked for me:

rm -rf node_modules npm install 
like image 41
Abhinav Singh Avatar answered Sep 29 '22 00:09

Abhinav Singh