简体   繁体   English

如何解决Node.js错误:找不到模块?

[英]How to solve Node.js Error: Cannot find Module?

When I start a dockerized Node.js testapp with 当我启动带有dockerized的Node.js testapp时

sudo docker-compose up

I get the following error: 我收到以下错误:

Starting testapp_web_1 ... done
Attaching to testapp_web_1
web_1  |
web_1  | > testapp@0.0.1 start /usr/app
web_1  | > node index.js
web_1  |
web_1  | internal/modules/cjs/loader.js:613
web_1  |     throw err;
web_1  |     ^
web_1  |
web_1  | Error: Cannot find module 'mongodb'
web_1  | Require stack:
web_1  | - /usr/app/index.js
web_1  |     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:610:15)
web_1  |     at Function.Module._load (internal/modules/cjs/loader.js:526:27)
web_1  |     at Module.require (internal/modules/cjs/loader.js:666:19)
web_1  |     at require (internal/modules/cjs/helpers.js:16:16)
web_1  |     at Object.<anonymous> (/usr/app/index.js:4:21)
web_1  |     at Module._compile (internal/modules/cjs/loader.js:759:30)
web_1  |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
web_1  |     at Module.load (internal/modules/cjs/loader.js:628:32)
web_1  |     at Function.Module._load (internal/modules/cjs/loader.js:555:12)
web_1  |     at Function.Module.runMain (internal/modules/cjs/loader.js:826:10)
web_1  | npm ERR! code ELIFECYCLE
web_1  | npm ERR! errno 1
web_1  | npm ERR! testapp@0.0.1 start: `node index.js`
web_1  | npm ERR! Exit status 1
web_1  | npm ERR!
web_1  | npm ERR! Failed at the testapp@0.0.1 start script.
web_1  | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
web_1  |
web_1  | npm ERR! A complete log of this run can be found in:
web_1  | npm ERR!     /root/.npm/_logs/2019-05-04T15_34_04_615Z-debug.log
testapp_web_1 exited with code 1

The project structur is as follows 项目结构如下

- testapp
--- docker-compose.yml
--- dockerfile
--- src
----- index.js
----- package.json

index.js index.js

'use strict';

const MongoClient = require('mongodb').MongoClient;
const express = require('express');

// Constants
const PORT = 8080;

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello world\n');
});

app.listen(PORT);
console.log(`Running on Port:${PORT}`);

package.json package.json

{
  "name": "testapp",
  "version": "0.0.1",
  "description": "Testapp",
  "author": "hi there",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "express": "^4.16.4",
    "mongodb": "^3.2.3"
  }
}

dockerfile docker文件

FROM node:12-alpine

WORKDIR /usr/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8080

docker-compose.yml docker-compose.yml

version: '3'
services:
  web:
    build: .
    command: npm start
    volumes:
      - ./src:/usr/app/
      - /usr/app/node_modules
    ports:
      - 80:8080

I have alread read this stackoverflow thread but I couldn't solve this issue. 我已经阅读了这个stackoverflow线程,但无法解决此问题。 I'm getting this error no matter what module I'm trying to use: mongodb, spdy, etc. Locally without docker the testapp is working. 无论我尝试使用哪个模块,我都会遇到此错误:mongodb,spdy等。在本地没有docker的情况下,testapp正常运行。 But I don't know what I'm doing wrong with docker. 但是我不知道我在用docker做错了什么。 Can anyone help me? 谁能帮我?

Have volume folder mapping for node_modules and ensure it has mongo folder copied / created 具有node_modules的卷文件夹映射,并确保已复制/创建了mongo文件夹

version: '3'
services:
  web:
    build: .
    command: npm start
    volumes:
      - ./src:/usr/app/
      - ./src/node_modules:/usr/app/node_modules
    ports:
      - 80:8080

Ref: https://morioh.com/p/42531a398049/containerizing-a-node-js-application-for-development-with-docker-compose 参考: https : //morioh.com/p/42531a398049/containerizing-a-node-js-application-for-development-with-docker-compose

You need to drop & rebuild the anonymous volume holding the node_modules for the updates to package.json to take effect. 您需要删除并重建包含node_modules的匿名卷,以使package.json的更新生效。

docker-compose rm -v
# then:
docker-compose build
docker-compose up

You will only have to do this for changes to node_modules , since the other volume is linked to your ./src/ , and will reflect changes on the host. 您只需要对node_modules进行更改,因为另一个卷已链接到您的./src/ ,并且将反映主机上的更改。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM