Next.js: Error: Cannot find module 'amdefine'

Created on 18 Jun 2017  ·  8Comments  ·  Source: vercel/next.js

I have a basic set up with a custom server going. This first time I've seen this error. I can't seem to figure this out.

Running NPMv5 and Nodev8.

// server.js
const express = require('express');
const next = require('next');
const bodyParser = require('body-parser');

const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

app.prepare().then(() => {
  const server = express();
  server.use(bodyParser.json());
  server.get('*', (req, res) => handle(req, res));
  server.listen(3000, err => {
    if (err) throw err;
    console.log('Next running on http://localhost:3000');
  });
});
// pages/index.js
import React from 'react';

export default function Hello() {
  return <h1>Hello</h1>;
}

my package.json

{
  "name": "rentpen",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.16.2",
    "body-parser": "^1.17.2",
    "express": "^4.15.3",
    "mongoose": "^4.10.6",
    "next": "^2.4.4",
    "next-redux-wrapper": "^1.1.2",
    "react": "^15.6.1",
    "react-dom": "^15.6.1",
    "react-redux": "^5.0.5",
    "redux": "^3.7.0",
    "redux-thunk": "^2.2.0"
  },
  "devDependencies": {
    "babel-eslint": "^7.2.3",
    "babel-preset-stage-0": "^6.24.1",
    "eslint": "^3.19.0",
    "eslint-config-airbnb": "^15.0.1",
    "eslint-plugin-import": "^2.3.0",
    "eslint-plugin-jsx-a11y": "^5.0.3",
    "eslint-plugin-react": "^7.1.0"
  }
}

Most helpful comment

I just faced this same issue. Looks like there is a critical new step for starting fresh when using npm 5. You also need to remove the package-lock.json file.

This worked for me:

rm -rf node_modules
rm -rf package-lock.json
npm install

All 8 comments

The following fixed my issue, but I've never had to install amdefine before. Is this new?

npm install -g amdefine
rm -rf node_modules
npm install

Doing a yarn why on the dependency shows it's a dependency of react-hot-loader. What version of npm are you on? npm --version. The latest version is 5.0.3. I just tried to reproduce but I couldn't so I'm going to close this.

➜  test2 yarn why amdefine
yarn why v0.24.5
[1/4] 🤔  Why do we have the module "amdefine"...?
[2/4] 🚚  Initialising dependency graph...
warning No license field
[3/4] 🔍  Finding dependency...
[4/4] 🚡  Calculating file sizes...
info This module exists because "next#react-hot-loader#source-map" depends on it.

I had to npm i amdefine to get this to work. I mean it's fine now. Just something I've never had to do before on my next projects, and I don't see it documented anywhere.

Node 8.1
NPM 5.0.3

It's not documented cause you shouldn't have to. It's a sub-sub dependency of Next.js. Maybe something went wrong with npm 🤔

Maybe. That's my point. I shouldn't have to install this manually.

I just faced this same issue. Looks like there is a critical new step for starting fresh when using npm 5. You also need to remove the package-lock.json file.

This worked for me:

rm -rf node_modules
rm -rf package-lock.json
npm install

Thank you @ftorre104 - that worked!

Had the same problem - thanks!

Was this page helpful?
0 / 5 - 0 ratings