【问题标题】:"uncaught exception: ReferenceError: require is not defined :" inside init-db.js docker“未捕获的异常:ReferenceError:未定义要求:” init-db.js docker
【发布时间】:2021-11-29 02:45:38
【问题描述】:

我正在使用卷来填充 Docker 中的 MongoDB 实例。为了访问和解析数据,我使用 papaparse 和 request(它已被贬值但仍然适用于我的用例)。当我在脚本顶部使用 require 关键字导入库时,我收到以下错误:未捕获的异常:ReferenceError: require is not defined :.

在我的 dockerfile 中,我已经安装了 npm、nodejs,并复制了 package.json。所以,我不知道为什么它不理解“require”关键字。我也尝试过使用 import,但这会导致类似的错误。

这是 dockerfile:

FROM python:3.8

ADD . /app

WORKDIR /app

RUN apt-get update

RUN apt-get -y upgrade

RUN apt-get -y install npm

RUN apt-get -y install nodejs

RUN pip install --upgrade pip

COPY requirements.txt ./app

RUN pip install -r requirements.txt

RUN rm -rf /var/cache/apt/*

COPY package.json ./app

RUN npm install

这里是 init-db.js:

const papa = require("papaparse");
const request = require("request");

const options = {/* options */};

const dataStream = request.get("https://example.com/myfile.csv");
const parseStream = papa.parse(papa.NODE_STREAM_INPUT, options);

dataStream.pipe(parseStream);

let data = [];
parseStream.on("data", chunk => {
    data.push(chunk);
});

parseStream.on("finish", () => {
// Doing something with the data.
    }
});

这对我来说相当新,所以任何帮助将不胜感激。

【问题讨论】:

  • 你能检查你的package.json是否包含type:module吗?
  • @AnirudhModi,我使用“npm init”命令创建了 package.json,所以没有 type:module。
  • init-db 文件我假设您“没有在浏览器中运行”,并且您正在节点本身中运行它?原因是,如果此代码在浏览器中运行,则 require 在浏览器中不可用,并且 require 仅在节点中可用,或者您可以使用 browserify browserify.orgwebpack
  • @AnirudhModi,你是对的。我在节点本身中运行它。

标签: node.js mongodb docker docker-compose


【解决方案1】:

coderslang 的人建议尝试:

  • 将package.json中的模块类型改为commonjs:
"type": "commonjs"
  • 从文件 package.json 中删除字符串“type”:“module”
  • 更改导入要求:
// const express = require('express');
import express from 'express';

【讨论】:

  • 我尝试了所有这些,但由于某种原因,它仍然无法正常工作。是不是因为在init-db.js中不允许使用papaparse?
  • 不,有错误告诉你 require 函数没有定义,所以你不能要求任何东西。
猜你喜欢
  • 2020-05-16
  • 2012-12-16
  • 2017-02-28
  • 2017-06-01
  • 2018-01-30
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多