Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: Cannot find module 'ejs'

Here is my complete error:

Error: Cannot find module 'ejs'
    at Function._resolveFilename (module.js:317:11)
    at Function._load (module.js:262:25)
    at require (module.js:346:19)
    at View.templateEngine (/Users/shamoon/local/node/lib/node_modules/express/lib/view/view.js:133:38)
    at Function.compile (/Users/shamoon/local/node/lib/node_modules/express/lib/view.js:65:17)
    at ServerResponse._render (/Users/shamoon/local/node/lib/node_modules/express/lib/view.js:414:18)
    at ServerResponse.render (/Users/shamoon/local/node/lib/node_modules/express/lib/view.js:315:17)
    at /Users/shamoon/Sites/soldhere.in/app.js:26:7
    at callbacks (/Users/shamoon/local/node/lib/node_modules/express/lib/router/index.js:272:11)
    at param (/Users/shamoon/local/node/lib/node_modules/express/lib/router/index.js:246:11)

My source code is also very simple:

var express = require('express');

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
  app.use(express.bodyParser());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.set('view engine', 'ejs');
app.set('view options', {
    layout: false
});

app.get('/', function(req, res) {
  res.render('index', {
    message : 'De groeten'
  });
});

app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);

In my folder, I have ejs installed in node_modules which I got using npm install ejs. enter image description here so my question is.. what gives? What am I doing wrong so that node can't find EJS when I clearly have it installed?

Thanks

like image 301
Shamoon Avatar asked Oct 13 '11 13:10

Shamoon


People also ask

Can not find EJS?

Go up one level (above app. js) and do npm install ejs. It will create a new node_modules folder and Express should find the module then. Hope it helps!!

What is EJS?

EJS simply stands for Embedded Javascript. It is a simple templating language/engine that lets its user generate HTML with plain javascript. EJS is mostly useful whenever you have to output HTML with a lot of javascript.


17 Answers

I had this exact same problem a couple of days ago and couldn't figure it out. Haven't managed to fix the problem properly but this works as a temporary fix:

Go up one level (above app.js) and do npm install ejs. It will create a new node_modules folder and Express should find the module then.

like image 127
evilcelery Avatar answered Sep 27 '22 11:09

evilcelery


Install express locally

(npm install express while in the project's root directory)


Your project depends on both express and ejs, so you should list them both as dependencies in your package.json.

That way when you run npm install in you project directory, it'll install both express and ejs, so that var express = require('express') will be the local installation of express (which knows about the ejs module that you installed locally) rather than the global one, which doesn't.

In general it's a good idea to explicitly list all dependencies in your package.json even though some of them might already be globally installed, so you don't have these types of issues.

like image 32
Will Avatar answered Sep 30 '22 11:09

Will


I my case, I just added ejs manually in package.json:

 {
   "name": "myApp"
   "dependencies": {
     "express": "^4.12.2",
     "ejs": "^1.0.0"
   }
 }

And run npm install (may be you need run it with sudo) Please note, that ejs looks views directory by default

like image 21
levon Avatar answered Sep 29 '22 11:09

levon


Way back when the same issue happened with me.

Dependency was there for ejs in JSON file, tried installing it locally and globally but did not work.

Then what I did was manually adding the module by:

app.set('view engine','ejs'); 

app.engine('ejs', require('ejs').__express);

Then it works.

like image 22
Asad Ashraf Avatar answered Sep 28 '22 11:09

Asad Ashraf


I had the same issue. Once I set environment variable NODE_PATH to the location of my modules (/usr/local/node-v0.8.4/node_modules in my case) the problem went away. P.S. NODE_PATH accepts a colon separated list of directories if you need to specify more than one.

like image 39
Pete Avatar answered Sep 28 '22 11:09

Pete


I installed ejs using command npm install ejs in express directory level and this solved my problem.

i have install express using steps mention in express guide http://expressjs.com/guide.html

like image 37
Ramesh Kotkar Avatar answered Sep 28 '22 11:09

Ramesh Kotkar


Install it locally rather installing it globally. Then your project may be run on any machine without any error.I think its better.

npm install express --save
npm install ejs --save
like image 30
Chanaka Fernando Avatar answered Sep 28 '22 11:09

Chanaka Fernando


After you've installed Express V x.x.x You need to choose an template view-engine. There are many really easy to learn. My personal go-to is EJS.

Other really great and easy to learn could be:

  • Handlebars
  • PUG (Former Jade)

To install EJS (And fix your error) Run in root of your project:

npm install ejs

Or if you're using Yarn:

yarn add ejs

Next you'll need to require the module, so open up your file where you require express (usually app.js or server.js)

add below var express = require('express');

var ejs = require('ejs');
like image 38
Timm Jensen Avatar answered Sep 26 '22 11:09

Timm Jensen


i had the same problem. So i did the following and it worked for me.

solution:

  1. run " npm init " in the project directory if not already done.
  2. install ejs and express as follows:

npm install ejs --save
npm install express --save

by doing so it creates the required dependencies in the package.json file

like image 31
Hemanta Avatar answered Sep 26 '22 11:09

Hemanta


I had this problem. I debugged using node-inspector and saw that from the node_modules folder where the express source files were, ejs was not installed. So I installed it there and it worked.

npm install -g ejs didn't put it where I expected it to despite NODE_PATH being set to the same node_modules folder. Prob doing it wrong, just started with node.

like image 29
Typo Johnson Avatar answered Sep 27 '22 11:09

Typo Johnson


I installed both: express and ejs with the option --save:

npm install ejs --save npm install express --save

This way express and ejs are dependecies package.json file.

like image 26
colo Avatar answered Sep 30 '22 11:09

colo


Reinstalling npm, express and ejs fixed my problem

This one worked for me,

  1. On your terminal or cmd -> Go to your apps directory,
  2. cd pathtoyourapp/AppName
  3. rerun your 'npm install'
  4. rerun your 'npm install express'
  5. rerun your 'npm install ejs'

after that, the error was fixed.

like image 27
apelidoko Avatar answered Sep 28 '22 11:09

apelidoko


STEP 1

See npm ls | grep ejs at root level of your project to check if you have already added ejs dependency to your project.

If not, add it as dependencies to your project. (I prefer adding dependency to package.json instead of npm installing the module.)

eg.

{                                                                                                      
  "name": "musicpedia",                                                                                
  "version": "0.0.0",                                                                                  
  "private": true,                                                                                     
  "scripts": {                                                                                         
    "start": "node ./bin/www"                                                                          
  },                                                                                                   
  "dependencies": {                                                                                    
    "body-parser": "~1.15.1",                                                                          
    "cookie-parser": "~1.4.3",                                                                         
    "debug": "~2.2.0",                                                                                 
    "express": "~4.13.4",                                                                              
    "jade": "~1.11.0",                                                                                 
    "ejs": "^1.0.0",                                                                                                                                                            
    "morgan": "~1.7.0",                                                                                
    "serve-favicon": "~2.3.0"                                                                          
  }                                                                                                    
}   

STEP 2 download the dependencies

npm install

STEP 3 check ejs module

$ npm ls | grep ejs
[email protected] /Users/prayagupd/nodejs-fkers/musicpedia
├── [email protected]
like image 21
prayagupa Avatar answered Sep 30 '22 11:09

prayagupa


Add dependency in package.json and then run npm install

    {
  ...
  ... 
  "dependencies": {
    "express": "*",
    "ejs": "*",
  }
}
like image 45
marwari Avatar answered Sep 27 '22 11:09

marwari


I think ejs template engine is not properly installed on your machine. You just install the template engine using npm

npm install ejs --save

then include the following code in app.js

app.set('view engine', 'ejs')
like image 31
Codemaker Avatar answered Sep 26 '22 11:09

Codemaker


I have the same issue it resolve after installing the express in my project directory. previously i install it in global scope with -g option with npm install command.

like image 1
Mohit Avatar answered Sep 27 '22 11:09

Mohit


In my case there was no silly syntax error, but same error arised. I had installed ejs and ejs-mate globally. I installed it locally and found my error resolved.

like image 1
Abhishek Srivastava Avatar answered Sep 30 '22 11:09

Abhishek Srivastava