Reputation: 13998
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?
Upvotes: 877
Views: 3254620
Reputation: 31
In my case, (On windows) I tried cleaning C:\Users[my.name]\AppData\Roaming\npm (Path environment variable), and then tried running 'npm install', it worked!
Upvotes: 0
Reputation: 25555
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) (archived on Wayback Machine) 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.
Upvotes: 682
Reputation: 585
Run the following commands, step by step:
npm cache clean -force
rm package-lock.json
rm -r node_modules
npm i --save --legacy-peer-deps
Upvotes: 5
Reputation: 63
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,
}
Upvotes: 0
Reputation: 528
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.
Upvotes: 0
Reputation: 4803
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 :)
Upvotes: 0
Reputation: 373
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!
Upvotes: 1
Reputation: 816
In my case,
npm install -D tslib @types/node
solved my problem, I was then able to run
ts-node index.ts
successfully.
Upvotes: 1
Reputation: 2846
rm package-lock.json
rm -r node_modules
npm i
That should fix issue and install all packages.
Upvotes: 51
Reputation: 8884
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:
"live-server": "https://github.com/tapio/live-server/tarball/master"
Currently that upgrades from v1.2.0 to v1.2.1
nvm install v13.14.0
nvm alias default v13.14.0
npm i -g [email protected]
npm update
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).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:
Upvotes: 1
Reputation: 2928
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
Upvotes: 11
Reputation: 1444
If you are using typescript and getting an error after installing all node modules then remove package-lock.json
. And then run npm install
.
Upvotes: 3
Reputation: 211
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/
Upvotes: 0
Reputation: 1351
Please install the new CLI v3 (npm install -g ionic@latest).
If this issue is still a problem in CLI v3. Thank you!
Upvotes: -2
Reputation: 6654
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.
Upvotes: 42
Reputation: 836
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
Upvotes: 19
Reputation: 426
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')
Upvotes: 0
Reputation: 165
Change the directory and point to your current project folder and then "npm install". .
This will install all dependencies and modules into your project folder.
Upvotes: -37
Reputation: 308
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
Upvotes: 2
Reputation: 49
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.
Upvotes: 4
Reputation: 449
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. :-(
Upvotes: 4
Reputation: 1529
This error can be encountered if you are require
ing 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.
Upvotes: 11
Reputation: 1375
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
.
Upvotes: 109
Reputation: 28349
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!
Upvotes: 4
Reputation: 2806
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.
Upvotes: 0
Reputation: 479
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.
Upvotes: 13
Reputation: 360
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.
Upvotes: 23
Reputation: 8090
I had a very similar issue. Removing the entire node_modules
folder and re-installing worked for me:
rm -rf node_modules
npm install
Upvotes: 612
Reputation: 741
First of all, yes, a part of my answer definitely is helpful to solve the error that is posted by OP. Secondly, after trying the below step, I faced a couple of other errors, and so, have written the solution of those too.
(Psst! I am not sure if I've successfully helped in solving the above error, or if I've broken some rule or format of answering, but I faced the above error and some others and it took much time for me to find the proper solutions for those errors. I'm writing the complete solution because in case, if someone else also faces these errors, then he'll hopefully get a solution here.)
So adding to, and elaborating the answer provided by PrashanthiDevi, and also adding my personal experience, here it is:
I am new to the whole e2e and unit tests part. I started looking into this part from Protractor. Now I already had the files in which tests were written, but I had to run the tests.
I had already installed all the required softwares and tools, but when I initially ran the code for running the tests, gulp itest
, I got this 'Cannot find module' Error. After going through many different questions on SO, I found one answer that I thought could help getting a solution.
The person had suggested to run the command npm install
in my project folder.
The reason for doing this was to update the node-modules folder, inside our project folder, with all the required and necessary files and dependencies.
(The below part maybe irrelevant with this question, but might be helpful if anyone came across the same situation that I faced.)
The above step surely solved my previous error, but threw a new one! This time the error being Could not find chromedriver at '..\node_modules\protractor\selenium\chromedriver'
.
However, the solution of this error was pretty silly (and funny) to me. I already had the chromedriver file in my selenium folder. But, turns out that the above error was coming because my chromedriver files were inside selenium folder and not inside chromedriver folder. So, creating a chromedriver folder and copying the chromedriver files there solved my problem!
Also, for the error: Timed out waiting for the WebDriver Server, you could add this line of code to conf.js file inside exports.config{}
:
seleniumAddress: 'http://localhost:8080/'
Hope this helps!
Upvotes: -4