在 Docker 中找不到 NodeJS 应用程序的模块?

问题描述 投票:0回答:1

我有一个 NodeJS 应用程序,使用一些我试图放入 docker 镜像中的模块。

    const Xvfb = require('xvfb')
    const fs = require("fs")
    const { exec } = require("child_process")

    const express = require('express')
    const app = express()
    const port = 3000

    console.log('hello world');

我不确定用户的路径,但以下是我遵循的步骤:

我的应用程序位于文件夹:/mynodejs,以下所有命令都从此文件夹运行:

  1. 我创建了包含内容的文件 package.json

    {
      "name": "appname",
      "version": "1.0.0",
      "description": "Node.js on Docker",
      "author": "Some Name",
      "main": "app.js",
      "scripts": {
        "start": "node app.js"
      },
      "dependencies": {
        "express": "^4.16.1"
      }
    }
    
  2. 创建了文件 Dockerfile

    nano Dockerfile
    

内容:

    FROM node:14            
    WORKDIR /usr/src/app    
    COPY package*.json ./
    RUN npm install
    COPY . .    
    CMD [ "node", "app.js" ]    
  1. 创建了文件:.dockerignore

    node_modules
    
  2. 构建文件:

    sudo docker build -t myapp .
    
  3. 检查图像是否已创建。已创建。

    sudo docker images
    
  4. 测试docker镜像

    docker run myapp
    

错误:

    internal/modules/cjs/loader.js:905
      throw err;
      ^

    Error: Cannot find module 'xvfb'
    Require stack:
    - /usr/src/app/app.js
        at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15)
        at Function.Module._load (internal/modules/cjs/loader.js:746:27)
        at Module.require (internal/modules/cjs/loader.js:974:19)
        at require (internal/modules/cjs/helpers.js:93:18)
        at Object.<anonymous> (/usr/src/app/app.js:11:22)
        at Module._compile (internal/modules/cjs/loader.js:1085:14)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
        at Module.load (internal/modules/cjs/loader.js:950:32)
        at Function.Module._load (internal/modules/cjs/loader.js:790:12)
        at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12) {
      code: 'MODULE_NOT_FOUND',
      requireStack: [ '/usr/src/app/app.js' ]

该错误并非特定于此处显示的模块“xhr2”。第一次调用 require('something')

时会引发错误

我该如何解决这个问题?

node.js docker
1个回答
2
投票

您的 package.json 文件中缺少 xvfb 作为依赖项。添加它,这样你的package.json文件就变成了

{
  "name": "appname",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "Some Name",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "^4.16.1",
    "xvfb": "^0.4.0"
  }
}

我可以看到 Npm 上有不同版本的 xvfb 软件包,所以也许您需要“@cypress/xvfb”版本 1.2.4。 cypress 的版本较旧,但每周的下载量要多得多。我对xvfb不熟悉。

如果您的主机上安装了 npm,您可以使用以下命令将包添加到 package.json 文件中

npm install xvfb

npm install @cypress/xvfb

而不是手动编辑 package.json 文件

© www.soinside.com 2019 - 2024. All rights reserved.