Error cannot find module node path

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

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
└─┬ faye@0.7.1
  ├── cookiejar@1.3.0
  ├── hiredis@0.1.13
  └── redis@0.7.1

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?

Peter Mortensen's user avatar

asked Jan 26, 2012 at 18:57

Dave Causey's user avatar

8

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.

Charlie Bamford's user avatar

answered Jan 26, 2012 at 19:15

Bill's user avatar

BillBill

24.8k7 gold badges94 silver badges124 bronze badges

20

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

rm -rf node_modules
npm install

Peter Mortensen's user avatar

answered May 25, 2015 at 10:30

Abhinav Singh's user avatar

Abhinav SinghAbhinav Singh

7,7621 gold badge22 silver badges33 bronze badges

6

npm install --save module_name

For example, if the error is:

{ [Error: Cannot find module ‘/root/.npm/form-data’] code: ‘MODULE_NOT_FOUND’ }

then you can resolve this issue by executing the command npm install --save form-data.

bruntime's user avatar

bruntime

3712 silver badges13 bronze badges

answered Jun 17, 2015 at 8:51

Piyush Chordia's user avatar

Piyush ChordiaPiyush Chordia

1,2851 gold badge9 silver badges7 bronze badges

1

For TypeScript users, if you are importing a built-in Node module (such as http, path or url) and you are getting an error such as "Cannot find module "x" then the error can be fixed by running

npm install @types/node --save-dev

The command will import the NodeJS TypeScript definitions into your project, allowing you to use Node’s built-in modules.

answered Oct 3, 2017 at 9:12

mgthomas99's user avatar

mgthomas99mgthomas99

4,8903 gold badges18 silver badges21 bronze badges

rm package-lock.json
rm -r node_modules
npm i

That should fix issue and install all packages.

answered Mar 26, 2021 at 11:53

Xakiru's user avatar

XakiruXakiru

2,4391 gold badge14 silver badges11 bronze badges

1

This happens when a first npm install has crashed for some reason (SIGINT of npm), or that the delay was too long, or data is corrupted.
Trying an npm install again won’t save the problem.

Something got wrong on the npm first check, so the best choice is to remove the file and to restart npm install.

Peter Mortensen's user avatar

answered Aug 6, 2015 at 16:23

Alex Werner's user avatar

Alex WernerAlex Werner

3603 silver badges9 bronze badges

1

Check if the enviroment variable NODE_PATH is set correctly and pointing to the node_modules path. nodejs uses this variable to search for the libraries

answered Feb 6, 2018 at 3:34

Edgar Chavolla's user avatar

2

I experienced this error yesterday. Took me a while to realise that the main entry in package.json was pointing to a file that I’d moved. Once I updated that the error disappeared and the package worked.

answered Aug 25, 2016 at 8:37

ukosteopath's user avatar

ukosteopathukosteopath

4236 silver badges14 bronze badges

4

If you use nvm, check that existing node_modules that are bindings to other libraries are compiled for the correct Node.js version.

I was having the same error. The reason was the following: We use nvm since we’re running two apps on a server, one requires Node.js 5.6 because it uses node-gd (which doesn’t run on Node.js 6 for now), the other requires Node.js 6. Node.js 6 is the apt-get installation.

Also we use the pm2 tool to deploy.

So, the default setup is that the pm2 process starts when nvm is not in effect, so it uses the apt-get installation of Node.js (version 6). So the main pm2 daemon starts with Node.js 6. If I run applications in fork mode they start in separate processes and nvm settings are in effect. When I run applications in cluster mode — they inherit the non-nvm environment.

So when I tried to switch to the cluster mode the application failed to start because the bindings compiled for 5.6 fail with this message.

I’ve fixed that by restarting pm2 when nvm setings are in effect. Also startup scripts should be fixed.

Peter Mortensen's user avatar

answered Jun 10, 2016 at 11:30

Ilya Sheershoff's user avatar

0

This error can be encountered if you are requireing a module that has a missing or incorrect main field in its package.json. Though the module itself is installed, npm/node has to use a single .js file as an entrypoint to your module. If the main field is not there, it defaults to looking for index.js in your module’s folder. If your module’s main file is not called index.js, it won’t be able to require it.

Discovered while turning a browserify-based module into a CommonJS require-able module; browserify didn’t care about the missing main field, and so the error had gone unnoticed.

answered Jun 23, 2017 at 14:30

MrCranky's user avatar

MrCrankyMrCranky

1,47824 silver badges31 bronze badges

If all other methods are not working for you…
Try

npm link package_name

e.g

npm link webpack
npm link autoprefixer

e.t.c

answered Aug 10, 2020 at 17:07

james ace's user avatar

james acejames ace

2,25224 silver badges15 bronze badges

2

Remove your node_module root folder from your project(eg: myApp).
Go to myApp folder and then type below command from terminal

>myApp>npm install

It will install all the dependency modules required for your project.

answered Jul 6, 2016 at 7:25

PrashanthiDevi's user avatar

1

PRO TIP:

This error happened to me, while fighting fatigue and mild illness, because I typed node blah instead of npm blah.

The error message received wasn’t angry enough to alert me to my own folly!

answered Sep 6, 2016 at 9:35

Dave's user avatar

DaveDave

2,95333 silver badges32 bronze badges

Specify the path to the restler folder, which will be inside node_modules folder like : var rest = require(‘./node_modules/restler’);

This worked for me.

answered Sep 6, 2017 at 5:20

Srishti Singh's user avatar

Just found an unusual scenario that may be of use to someone and is sort of a red herring.

I was also getting the Cannot Find Module error but oddly everything worked perfectly in my local (Mac hosted) Node.js environment. This problem only appeared when the code was deployed on our Linux server.

Well… it turned out to be a typo that (apparently) the Mac based Node.js installation was perfectly happy to ignore.

The include looked like this:

var S3Uploader = require('./S3Uploader.class');

But the actual file was called «s3Uploader.class.js»

Notice the casing difference in the ‘s’ vs. ‘S’ between the code and the filename.

So — in the odd chance that none of the other solutions here are solving your problem, triple check that you’re not mis-casing the characters in your included filename! :)

and DUH!

answered May 18, 2017 at 20:17

Yevgeny Simkin's user avatar

Yevgeny SimkinYevgeny Simkin

27.7k39 gold badges136 silver badges234 bronze badges

1

I can add one more place to check; the package that I was trying to use was another one of my own packages that I had published to a private NPM repo. I had forgotten to configure the ‘main’ property in the package.json properly. So, the package was there in the node_modules folder of the consuming package, but I was getting «cannot find module». Took me a few minutes to realise my blunder. :-(

answered Jul 10, 2017 at 5:57

martinp999's user avatar

martinp999martinp999

3995 silver badges9 bronze badges

If you are using typescript and getting an error after installing all node modules then remove package-lock.json. And then run npm install.

answered Dec 20, 2019 at 6:22

Kartik Garasia's user avatar

Kartik GarasiaKartik Garasia

1,2241 gold badge17 silver badges25 bronze badges

In my case I had UNMET PEER DEPENDENCY redux@^3.0.0 causing this error message, see all of them and install missing modules again using —save

npm install redux --save

answered Oct 18, 2017 at 11:50

Ursu Alexandr's user avatar

I had this issue using live-server (using the Fullstack React book):

I kept getting:

Error: Cannot find module './disable-browser-cache.js' 
...

I had to tweak my package.json

  • From:

    «scripts»: {

    «server»: «live-server public —host=localhost —port=3000 —middleware=./disable-browser-cache.js»

    }
    «scripts»: {

  • To:


    «server»: «live-server public —host=localhost —port=3000 —middleware=../../disable-browser-cache.js»

    }

Notice relative paths seem broken/awkward… ./ becomes ../../

I found the issue here

Also if anyone follows along with that book:

  1. change devDependencies in packages.json to:

"live-server": "https://github.com/tapio/live-server/tarball/master"

Currently that upgrades from v1.2.0 to v1.2.1

  1. It’s good to use nvm.
  2. It’s best to install v13.14 of Node (*v14+ creates other headaches)
    nvm install v13.14.0
  3. nvm alias default v13.14.0
  4. Update npm with npm i -g npm@7.3.0
  5. run: npm update
  6. you can use npm list to see the hierarchy of dependencies too. (For some reason node 15 + latest npm defaults to only showing first level of depth — a la package.json. That renders default command pointless! You can append --depth=n) to make command more useful again).
  7. you can use npm audit too. There issues requiring (update of chokidar and some others packages) to newer versions. live-server hasn’t been updated to support the newer corresponding node v 14 library versions.

See similar post here


Footnote:
Another thing when you get to the JSX section, check out my answer here:
https://stackoverflow.com/a/65430910/495157

When you get to:

  • Advanced Component Configuration with props, state, and children. P182+, node version 13 isn’t supported for some of the dependencies there.
  • Will add findings for that later too.

answered Dec 21, 2020 at 20:42

JGFMK's user avatar

JGFMKJGFMK

8,1254 gold badges53 silver badges92 bronze badges

0

In my case,

npm install -D tslib @types/node

solved my problem, I was then able to run

ts-node index.ts

successfully.

answered Jul 7, 2021 at 15:58

xpagesbeast's user avatar

xpagesbeastxpagesbeast

7661 gold badge8 silver badges21 bronze badges

  • Run the following commands step by step. It fixed my issue:

npm cache clean –force
rm package-lock.json
rm -r node_modules
npm i —save —legacy-peer-deps

answered Sep 21, 2022 at 10:09

Yasir's user avatar

YasirYasir

3993 silver badges10 bronze badges

2

I was trying to publish my own package and then include it in another project. I had that issue because of how I’ve built the first module. Im using ES2015 export to create the module, e.g lets say the module looks like that:

export default function(who = 'world'){
    return `Hello ${who}`;
}

After compiled with Babel and before been published:

'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function () {
    var who = arguments.length <= 0 || arguments[0] === undefined ? 'world' : arguments[0];


    return 'Hello ' + who;
};

So after npm install module-name in another project (none ES2015) i had to do

var hello = require('module-name').default;

To actually got the package imported.

Hope that helps!

answered Apr 6, 2016 at 7:53

Belgor's user avatar

BelgorBelgor

1811 gold badge2 silver badges9 bronze badges

Encountered this problem while using webpack with webpack-dev-middleware.

Had turned a single file into a folder.

The watcher seemed to not see the new folder and the module was now missing.

Fixed by restarting the process.

answered Apr 19, 2017 at 0:22

Chris's user avatar

ChrisChris

2,7561 gold badge29 silver badges34 bronze badges

Maybe like me you set ‘view engine’ in express to an engine that doesn’t exist, or tried to use an unregistered templating engine.
Make sure that you use:

app.engine('engine name',engine)
app.set('view engine','engine name')

answered Feb 3, 2018 at 17:14

Mohammed Abo-zaid's user avatar

Removing node/npm and then re-installing the stable(not the latest) version worked for me.

sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}

https://nodejs.org/en/download/

answered Apr 12, 2019 at 15:50

Kal's user avatar

KalKal

1813 silver badges15 bronze badges

In my case, i was not using the proper version of nvm.

answered Jul 28, 2021 at 5:51

maverick's user avatar

maverickmaverick

821 silver badge14 bronze badges

A rare but also possible case is a typo in the module name. I missed the «s» in the file name when executing node .util.js, where it should be node.utils.js and didn’t find any solution among all the answers under this question until I found out that I can’t run the file even if I delete everything!

answered Sep 4, 2021 at 12:31

skygate's user avatar

skygateskygate

3712 silver badges11 bronze badges

Apparently, judging by this question, there are a LOT of possible causes.

Maybe this will help someone, hoping nobody was as stupid as I was to use this technique:

Check if you have any node_modules folder up the folder tree.

Scenario 1:
If you ever had a projects folder, where you shared a node_modules folder between multiple projects, you may not have had any problems

|- projects
| |- node_modules     <- OK
| |- project1         <- No node_modules folder
| | |- package.json
| |- project2         <- No node_modules folder
| | |- package.json

Scenario 2:
If you add a third project of a different nature, you may choose to keep a node_modules folder in that project:

|- projects
| |- node_modules     <- Can be used by project 3
| |- project1         <- No node_modules folder
| | |- package.json
| |- project2         <- No node_modules folder
| | |- package.json
| |- project3
| | |- node_modules   <- Packages for project 3 only
| | |- package.json

I’m guessing some packages in project 3’s node-modules folder are relying on packages that it finds (or doesn’t find) in the parent folder’s node_modules folder. Even though you’d expect the dependencies to be found in project 3’s node_modules folder. Maybe it’s because of the way some packages are imported and referenced?

Goes without saying that’s a disaster waiting to happen :)

answered Feb 16, 2022 at 19:14

DerpyNerd's user avatar

DerpyNerdDerpyNerd

4,6786 gold badges39 silver badges90 bronze badges

I ran into this issue when I was upgrading the node version along with installing several different package versions. The project created a docker image/container to work in.

The issue was that the Docker image wasn’t recreated when I added a package and rebuilt the project. The proper information had been in my local package.json and package-lock.json files.

Deleting the Docker image and not just the container solved my problem.

answered Apr 29, 2022 at 14:11

majestzim's user avatar

majestzimmajestzim

5186 silver badges16 bronze badges

what ended up working for me was making sure to include any merge-deep dependencies as an external in your webpack config:

externals: {
    puppeteer: 'require("puppeteer")',
}

And to declare the node_modules path relative to your package.json in your package.json as an ‘extraResource’.

"extraResources": [
    "node_modules/puppeteer,
}

answered Dec 13, 2022 at 14:37

Jason Hoku Levien's user avatar

When you are working in Node, you will sometimes encounter the error Cannot find module 'module-name' with the error code MODULE_NOT_FOUND.

The error looks like this:

	internal/modules/cjs/loader.js:796
    throw err;
    ^

Error: Cannot find module 'module'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:793:17)
    at Function.Module._load (internal/modules/cjs/loader.js:686:27)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
    at internal/main/run_main_module.js:17:11 {
        code: 'MODULE_NOT_FOUND',
        requireStack: []
    }

In this post, we’ll learn how to resolve this error.

What is the problem?

The issue is that Node is unable to find the module that you are trying to import into your Node application.

The most common reason for this is that you simply haven’t installed the project’s dependencies yet.

The project’s dependencies are listed in the package.json file at the root of the project.

The Solution

To fix the Cannot find module error, simply install the missing modules using npm.

To so, you can use the following command:

	npm install

If you are using the yarn package manager, you can use the following command:

	yarn install

This will install the project’s dependencies into your project so that you can use them.

Sometimes, this might still not resolve it for you. In this case, you’ll want to just delete your node_modules folder and lock file (package-lock.json or yarn.lock) and try again.

This is how you can delete the node_modules folder and lock files:

	rm -rf node_modules

rm package-lock.json
rm yarn.lock

Local files

If your module is not coming from a remote source, you are seeing the error because the path to the local file is not correct.

Try to confirm that the path pointing to the local module is correct and your error should be resolved.

Conclusion

The Cannot find module error is a common error that usually happens when dependencies are not installed. Once you install your dependencies and ensure that the paths are correct, you can resolve the error and run your application successfully.

Hopefully, this resolved the issue for you.

Thanks for reading!

If you want to learn about web development, founding a start-up, bootstrapping a SaaS, and more, follow me on Twitter! You can also join the conversation over at our official Discord!

  • Support Us

  • Join

  • Share

  • Tweet

  • Share

Give feedback on this page!

Update: This post was originally published on my blog decodingweb.dev, where you can read the latest version for a 💯 user experience. ~reza

“Error: cannot find module” occurs when you try to load a non-existant module in Node – Either via ESM (ECMAScript Modules) or CommonJS module systems.

The error usually looks like this in the console:

node:internal/modules/cjs/loader:936
  throw err;
  ^

Error: Cannot find module '/var/www/scripts/app.js'

Enter fullscreen mode

Exit fullscreen mode

Why does «Error: cannot find module» occur?

The error «cannot find module» might happen if you’re trying to:

  • Import a third-party package you haven’t installed yet (with npm or yarn).
  • Import a local module, but the path is wrong.
  • Run a node script in the terminal, but the script doesn’t exist (or path is wrong).
  • Use node standard libraries with TypeScript, but you haven’t installed the @types/node package.
  • The module’s package.json has a main field pointing to an entry file that doesn’t exist.

Before anything, let’s review what a module is and how module systems work in a high level (Or jump to the solutions).

The module system: Modules are the building blocks of an application. Node implements ESM and CommonJS (the default one) module systems to let you organize your code as reusable components.

With modules, you can only expose the public interface of your components and keep the internal functionalities private. This is done by using a module.exports (CommonJS modules) or export (ES Modules).

The following code is an example of a module, which has a function to determine whether a number is odd or not:

// math.js

function isOdd(number) {
return number % 2 !== 0
}

// Make isOdd available to other scripts (and other modules)
module.exports = isOdd

Enter fullscreen mode

Exit fullscreen mode

And here’s how we import it into another script called index.js:

// index.js 
const add = require('./isodd.js') 

console.log(isOdd(3)) 
// output: true

Enter fullscreen mode

Exit fullscreen mode

All the modules you use have an ESM or CommonJS export declaration.

How do module systems find modules?

If the identifier passed to require() or import() is a reference to a file (it starts with /, ../, ./, etc.) in your filesystem, Node will load it from the respective path. Otherwise, it looks it up in the installed modules — inside the node_modules directory.

If the module isn’t found, it raises the «Cannot find module» error.

How to fix the «Cannot find module» error in Node.js?

There are several scenarios this error can happen; Let’s explore each.

Third-party packages: If you try to import a third-party module and get this error (and you’re sure the spelling is correct), you probably haven’t installed the package yet.

Imagine this is the code:

//index.js

const axios = require('axios');

// Make an HTTP request with Axios

Enter fullscreen mode

Exit fullscreen mode

If I run this on my machine, I’ll get the «Cannot find module» error.

And that’s because I haven’t installed it yet. So in my project directory (where my package.json resides), I’d have to install axios package with npm or yarn like so:

npm install axios

Enter fullscreen mode

Exit fullscreen mode

Local modules: Imagine you have a set of utility functions kept in a JavaScript file named utils.js. You want to import a function called getUrl() from this utils.js into your script:

// index.js

const { getUrl } = require('utils')

// Do something here ...

Enter fullscreen mode

Exit fullscreen mode

But when you run npm run build, the build fails:

ERROR in ./app/index.js 30:0-30
Module not found: Error: Can't resolve 'utils' in '/var/www/app'

Enter fullscreen mode

Exit fullscreen mode

In this case, since utils isn’t a reference to a local file, my bundler (Webpack) assumes it’s inside a node_modules directory. The build fails as the utils module isn’t an installed package.

So what I need to do here is to make it an absolute path by adding ./ to my identifier:

// index.js

const { getUrl } = require('./utils.js')

// Do something here ...

Enter fullscreen mode

Exit fullscreen mode

Problem solved.

Sometimes the error occurs because the letter casing is off. File names on Mac and Windows are case-insensitive by default; This means ./Utils and ./utils both work on Mac and Windows (where you develop the app). However, it’ll break on a Linux file system where filenames are case-sensitive.

Running a node script: Another scenario reported by developers is when you run a script with the node command. However, the respective file can’t be located — probably owing to a typo in the name or path.

So always double-check that the path is correct and the script exists. You can always take advantage of the terminal’s autocomplete feature by typing the initial letters and pressing the tab to let it complete the path for you.

node ./scriptName.js

Enter fullscreen mode

Exit fullscreen mode

Node and TypeScript: If you’re coding in TypeScript and you’re importing a built-in Node module like fs, you might get a «Cannot find module ‘fs'» error too.

You can fix the issue by installing @types/node:

npm install @types/node --save-dev

Enter fullscreen mode

Exit fullscreen mode

Even though all packages in node_modules/@types (of any enclosing folder) are included in your compilation. However, it’s worth ensuring node is added under compileOptions.types:

tsconfig.json

{
  compilerOptions: {
    types: [node, jest, express]
  }
}

Enter fullscreen mode

Exit fullscreen mode

Missing entry file in package.json: Each module has an entry file named index.js(by default) unless it’s changed in the module’s package.json via the main field.

{
  name: utils
}

Enter fullscreen mode

Exit fullscreen mode

If you decide to change the main field to another entry file (e.g., main.js), you must ensure the file exists. Or if you rename or relocate that file in the future, remember to update the package.json too.

Missing entry file in package.json has been reported by several users on Stackoverflow.

Importing a module from the global node_modules or a separate directory: Sometimes you might have to use a globally-installed package in your development environment.

If you try to load a globally-installed module in your project, you might get the «Cannot find module» error.

A workaround to this problem is using the npm link command. If the package is installed globally, all you need to do is run the following command while in your project directory:

npm link package-name

As a result, npm will create a symbolic link from the globally installed package name to the node_modules directory of your project — as if you’ve installed it with npm install package-name.

If the module you want to use is a local file residing somewhere in your file system other than the global node_modules (e.g., a module you’re developing), you’ll have to do it in a two-step process:

First step: In the terminal, you need to change the directory to where the module resides and run the npm link (without any parameter). As a result, a symlink is created in the global node_modules that links to your local package.

npm link

Enter fullscreen mode

Exit fullscreen mode

Second step: After that, you change the directory to your project directory (where you want to import the module) and run the following command:

npm link package-name

Enter fullscreen mode

Exit fullscreen mode

This will create a symbolic link from the globally installed package name to the node_modules directory of your project.

Now, you can use the package as if it’s an installed third-party package.

What if the problem persists?

If none of the above solutions worked for you, maybe you’re dealing with corrupted or incomplete installations. In that case, you can take the following steps:

Delete node_module directory:

rm -rf node_modules

Enter fullscreen mode

Exit fullscreen mode

Delete package-lock.json:

rm -f package-lock.json

Enter fullscreen mode

Exit fullscreen mode

Clear the npm cache:

npm cache clean --force

Enter fullscreen mode

Exit fullscreen mode

Install the packages again:

npm install

Enter fullscreen mode

Exit fullscreen mode

This will make a clean install of all the dependencies listed in your package.json file.

I hope these solutions help you fix your code.

Thanks for reading.


❤️ You might like:

  • TypeError: map is not a function in JavaScript in JavaScript (Fixed)
  • Add commas to numbers in JavaScript (Explained with examples)
  • SyntaxError: Unexpected end of JSON input in JavaScript (Fixed)
  • How to fix «ReferenceError: document is not defined» in JavaScript
  • Label htmlFor Property Explained

Error: cannot find module [Node npm Error Solved]

If you’re a developer that works with Node JS and JavaScript libraries and frameworks like React, Vue, and Angular, then you might have encountered the «Error: cannot find module» error.

In this article, I’m going to show you how to fix the error.

Why the «Error: cannot find module» Occurs

This error occurs because of the following reasons:

  • you’re trying to import an item from a module you don’t have installed in your project directory
  • you’re importing some things from an outdated package
  • you’re pointing to a file that does not exist

In the screenshot below, you can see that I’m getting the error:

ss1

I’m getting the error because I’m trying to import the freeCodeCamp icon from the react-icons package, which I don’t have installed.

import { FaFreeCodeCamp } from "react-icons/fa";

How to Fix the «cannot find module» Error

If you get this error, the solution is always in the error. The module (package) not found is always specified in the format «Module not found: Error: Can’t resolve ‘package name’ in ‘project directory».

In my case, I got it like this «Module not found: Error: Can’t resolve ‘react-icons/fa’ in ‘C:UsersuserDesktopProjectsAddress Locatoraddress-locatorsrc'».

To fix the error, you need to install the package that is absent in your project directory – npm install package-name or yarn add package-name.

In my case, I need to install the react-icons package so the freeCodeCamp icon can be resolved. I’ll do that by running yarn add react-icons.

Once I install the package and run the app, everything should successfully compile:

ss2

If you install the package but you still get the error, then follow the steps below:

  • delete the node modules folder by running rm -rf node_modules
  • delete package.lock.json file by running rm -f package-lock.json
  • clean up the NPM cache by running npm cache clean --force
  • install all packages again by running npm install

That should fix the error for you.

Conclusion

When you get the “cannot find module” error, or “module not found”, it means you’ve not installed the package you’re trying to use.

If the error occurs even if you have the package installed, then the fixes suggested in this article can help you out.

Thank you for reading.



Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started

Introduction

If you are trying to run your Node.js application and you get something
like this:

Error: Cannot find module 'C:UsersMemy_app.js'

then you are most likely trying to run the wrong file. It is possible
you are missing a dependency that is needed from npm install,
but if it says it cannot
find the main file you are trying to run, then you are
trying to run a file that does not exist. It is a common mistake.

How to fix «Error: Cannot find module»

You need to double check you are running the correct file from the
correct directory. Here are some steps to diagnose.

General tips

Here are some general things to keep in mind when diagnosing the issue:

  • Make sure you are in the correct directory.
  • Make sure you are trying to run the correct file name.
  • File and directory names are case sensitive.

How to change directories

To change directories, use the cd command in your terminal.
For example, if your username was Me on the computer:

# In Windows
cd C:UsersMemy_project_directory

# In Mac OS
cd /Users/Me/my_project_directory/

# In Linux
cd /home/Me/my_project_directory/

How to see what directory you are in

To check what directory you are currently in, use the folowing in your terminal.

# In Linux/Mac
pwd

# In Windows
echo %cd%

How to print the contents of current directory

To see what files and directories exist in your current directory
use the following in your terminal:

# In Windows
dir

# In Linux/Mac
ls

Conclusion

After reading this you should have some idea why you get
the error Error: Cannot find module and how to diagnose and
fix the problem.

JavaScript’s Node.js server supports module export and import in both ECMAScript modules and CommonJS format.

Sometimes, npm will throw an error saying Cannot find module because of module import as shown below:

$ node index.js
node:internal/modules/cjs/loader:936
  throw err;
  ^

Error: Cannot find module 'axios'
Require stack:
- /n-app/index.js
    at ... {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/n-app/index.js' ]
}

Here’s the content of the index.js file:

var axios = require("axios");

The cannot find module error occurs because npm cannot find the module required by the index.js file. In this case, the axios module.

To resolve the error, you need to make sure that axios is installed in the node_modules/ folder.

Please note that the node_modules/ folder must be located in the same directory as the index.js file:

.
├── index.js
├── node_modules
├── package-lock.json
└── package.json

If you have run the npm install command before, then it’s possible that the installation of the module is incomplete or corrupted.

Delete the node_modules/ folder using the rm -rf node_modules command, then run npm install again. That may fix the issue.

Finally, the same error can happen when you require() a local .js file that can’t be found.

Suppose you have a file named lib.js placed in the same folder as the index.js file:

.
├── index.js
└── lib.js

To import the file, you need to specify the correct path in the require() function.

The following code:

var helper = require("lib.js");

Will produce the same error:

$ node index.js
node:internal/modules/cjs/loader:936
  throw err;
  ^

Error: Cannot find module 'lib.js'
Require stack:
- /n-app/index.js
    at ... {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/n-app/index.js' ]
}

This is because the require() function will always look inside the node_modules/ folder.

To let Node.js knows that you are importing a local file, use the absolute path as follows:

The ./ syntax means the root directory where you run the node command. In this case, the folder where index.js is located.

If you have a file one level down like this:

.
├── index.js
└── helpers
    └── lib.js

Then you need to adjust the require() path as shown below:

var helper = require("./helpers/lib.js");

The same also applies when you use the ES modules format as follows:

import helper from "./helpers/lib.mjs";

To conclude, the error “Cannot find module” happens when Node.js can’t find the module that a file is trying to import.

You can see the file and the module that’s causing the issue from the error output generated by Node itself.

And that’s how you resolve the npm cannot find module issue. Great work! 😉

In this tutorial, we are going to learn about how to resolve can’t find a module error in Node.js.

If you are not installed a module properly using npm install command and trying to use it in your project by using require() function you will see this following error inside the terminal.

internal/modules/cjs/loader.js:796
    throw err;
    ^

Error: Cannot find module '/Users/saigowtham/Desktop/sss/run'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:793:17)
    at Function.Module._load (internal/modules/cjs/loader.js:686:27)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
    at internal/main/run_main_module.js:17:11 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

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.

Here is an example:


# npm install your-module-name

npm install express

or delete the node_modules folder and package-lock.json file and re-install it again using the npm install command.

rm -rf node_modules package-lock.json

Can’t find modules in local files

If you are trying to import one local file inside another and passed a wrong path to the require() function you will see this error again.

To fix this error, pass a correct module path to the require() function.

Why we get “error: cannot find module express”?

Express is a web framework built on Node.js, and one that allows developers to build minimal and scalable web and mobile applications. It provides features from top performance, API designs, and extensive frameworks built on it.

For us to run Express, we need to the Node Package Manager, popularly known as npm. However, when we run certain node applications or express codebase, we might experience the error message below

Error: Cannot find module 'express'

This error is quite common and exists because when your code ran, the express package or module wasn’t found within its environment. In this article, we will discuss the ways you could solve this error.

Solution-1: Using npm

To do anything within Node, the npm is your gateway to perform a lot of operations, and to solve this error, you will need it.

Normal Install

Unless you haven’t installed the express module, you can run the following node command

npm install express

However, if you still run the code and it gives the same issue, you can try a global installation of the express module as you might be running your Node.js code from a global environment within your OS.

ALSO READ: Using try catch finally in Node.js [Best Practices]

Global Install

To perform global install of a node module or package, you need the -g flag. This works by place the path for the express module within the system path. With these, you can install the express module globally and be able to access it without raising a not found error message.

npm install -g express

Output:

added 57 packages, and audited 58 packages in 3s

7 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

Solution-2: Check your package.json file

To solve Error: Cannot find module 'express' error message, you can if the express library is within your node_modules which is available via the package.json file.

A simple search within the package.json can help, and you should the following within the package.json file.

"node_modules/express": {
      "version": "4.18.1",
      "resolved": "<https://registry.npmjs.org/express/-/express-4.18.1.tgz>",
      "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
...

If the above is not present, you need to either do the normal or global install as stated in the previous section.

Solution-3: Set NODE_PATH for your node_modules

If express module is present within the package.json file and you have tried the normal and global installation, and still experience the same issues, there is another option.

This option involves setting the NODE_PATH for your node_modules. To carry out this operation, you need to install or update express.

npm install express

Afterwards, you set and link the node path to the place of your node_modules. For Linux environments, the following command works.

set NODE_PATH=your\directory\to\node_modules;%NODE_PATH%

For Windows environments, the following command works

setx NODE_PATH=%AppData%\npm\node_modules

Summary

When working within node.js and express, we might face Error: Cannot find module 'express' error message. There are different reasons for this error message to be thrown at us and understanding the context matters.

If you have not installed express, you might experience this and if the node_modules is not set within your OS environment variables, you might experience it too. Therefore, if you try any of the options above, you will be able to deal with the Error: Cannot find module 'express' error message.

ALSO READ: How is Nodejs single threaded? The Truth Revealed!

Further Reading

Installing Express (expressjs.com)
setx | Microsoft Learn
Node.js Error: Cannot find module express

Didn’t find what you were looking for? Perform a quick search across GoLinuxCloud

Понравилась статья? Поделить с друзьями:
  • Error cannot find module inherits
  • Error cannot find module mysql
  • Error cannot find module mongoose
  • Error cannot find module minimist
  • Error cannot find module lodash