I have created a node.js application that when deployed locally works perfectly fine locally but when I deploy it to heroku I get an error says "Error: Cannot find module 'express' -/app/server/server.js"
here is my server.js file
const express = require('express');
const db = require('./config/connection');
const PORT = process.env.port || 3001;
const app = express();
const mongoose = require('mongoose');
const cors = require('cors')
const routes = require('./routes');
app.use(express.json());
app.use(cors())
app.use(routes);
app.listen(PORT, () => {
console.log(`API running on port ${PORT}`)
});
file structure
->client
->node_modules
->server
->config
->connection.js
->controllers
->models
->node_modules
->routes
->.env
->package-lock.json
->package.json
->server.js
->.gitignore
->package-lock.json
->package.json
->Procfile
here is my server/package.json
{
"dependencies": {
"bcrypt": "^5.1.0",
"body-parser": "^1.20.2",
"cors": "^2.8.5",
"dotenv": "^16.0.3",
"express": "^4.18.2",
"mongoose": "^6.9.1",
"multer": "^1.4.5-lts.1",
"nodemon": "^2.0.20",
"path": "^0.12.7"
},
"scripts": {
"start": "node server.js",
"devstart": "nodemon server.js"
},
"name": "server",
"version": "1.0.0",
"main": "server.js",
"author": "",
"license": "ISC",
"description": ""
}
here is my package.json on root folder
"name": "blog-post-mongo",
"version": "1.0.0",
"description": "",
"main": "server/server.js",
"scripts": {
"start": "node server/server.js",
"test": "echo \"Error: no test specified\" && exit 1",
"develop": "concurrently \"cd server && npm run devstart\" \"cd client && npm start\""
},
procfile
web: npm start
i have tried deleting node_modules and package-lock.json and reinstalling dependancies. I have also made sure that "express" is not capitalized on my files. Thanks!
Heroku only uses the package.json
in your root directory.
If you want to install dependencies from other directories, you need to create a build
script in your root level package.json
, e.g. something like this:
"scripts": {
"build": "npm --prefix server run build && npm --prefix client run build"
}
This assumes that you also have dependencies in a package.json
in your client/
folder.