在 node.js 中运行时未定义要求

Posted

技术标签:

【中文标题】在 node.js 中运行时未定义要求【英文标题】:Require is not defined when running in node.js 【发布时间】:2021-04-14 09:28:14 【问题描述】:

我正在尝试访问 Strava API,但终端正在显示

ReferenceError: require is not defined
at file:///Users/Me/directory/code.js:1:10
at ModuleJob.run (internal/modules/esm/module_job.js:152:23)
at async Loader.import (internal/modules/esm/loader.js:166:24)
at async Object.loadESM (internal/process/esm_loader.js:68:5)

当我尝试在终端中从他们的网站运行代码时。

我研究过它,它说这是因为我在浏览器上运行它,但我认为不是。我注释掉了所有的代码,所以唯一的一行是

var StravaApiV3 = require('strava_api_v3');

并且错误仍然不断出现。我只是用“cd 目录”然后节点 code.js 运行它(为清楚起见,目录和代码的名称已更改),所以我不知道为什么它不起作用。一行代码是否以某种方式进入浏览器?我正在使用 MacOS Big Sur 运行它,如果这有什么改变的话。

这是 Strava 在其网站上的其余代码,如果你需要的话:

    var StravaApiV3 = require('strava_api_v3');
var defaultClient = StravaApiV3.ApiClient.instance;

// Configure OAuth2 access token for authorization: strava_oauth
var strava_oauth = defaultClient.authentications['strava_oauth'];
strava_oauth.accessToken = "YOUR ACCESS TOKEN"

var api = new StravaApiV3.ActivitiesApi()

var id = 789; // Long The identifier of the activity.

var opts =  
  'includeAllEfforts': true // Boolean To include all segments efforts.
;

var callback = function(error, data, response) 
  if (error) 
    console.error(error);
   else 
    console.log('API called successfully. Returned data: ' + data);
  
;
api.getActivityById(id, opts, callback);

TL;DR 这个代码给了我“require is not defined”的错误,即使我用 node.js 运行它

编辑:

-当我在同一目录中运行虚拟 require(它只是 var fs = require('fs');)时,它仍然给出相同的错误

-我的目录的 package.json 是

    
  "name": "stravatest",
  "version": "1.0.0",
  "description": "description",
  "main": "stravatest.js",
  "type":"module",
  "scripts": 
    "test": "test"
  ,
  "repository": 
    "type": "git",
    "url": "url"
  ,
  "keywords": [
    "keyword"
  ],
  "author": "author",
  "license": "ISC"

【问题讨论】:

您的package.json 中有什么内容以及您正在运行的文件的扩展名是什么? 创建一个新文件test.js 在该文件中放入一行代码var fs = require('fs');。使用节点node test.js 运行该文件。如果出错,请将该信息与您的 nodejs 版本一起发布。如果没有出错,则说明您的其他文件有问题。 我没有看到任何名为 strava_api_v3 的公共模块,因此无法测试该代码中是否存在错误(我假设它是私有模块?)。有一些公共模块 stravastrava-v3 可以工作。 @Liam - 我认为 OP 实际上并没有尝试在浏览器中运行任何东西,所以到目前为止您的指导似乎不适用于在普通 nodejs 中运行。 您能否使用完整的堆栈跟踪更新您问题中的错误消息? 【参考方案1】:

从您的 package.json 中删除 "type": "module"。这告诉 Node 你使用的是 ESM 而不是 CJS,但这不是你想要做的(除非你这样做,在这种情况下你应该使用 .mjs 扩展并使用 import 而不是 require

【讨论】:

【参考方案2】:

但是您究竟是如何运行该项目的?您应该使用以下命令在 package.json 中添加“启动”脚本:node stravatest.js。然后在你的终端中运行npm start,它应该可以工作了。

另外,正如 Zac Anger 所说,请记住删除 package.json 中的 "type": "module" 行。否则你会看到一个错误。

【讨论】:

以上是关于在 node.js 中运行时未定义要求的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序在本地运行时,Node.js 能够连接到 MySQL 容器,但当应用程序在容器中运行时无法连接

应用未在 iO 中运行时的本地区域识别

在 CLI 中运行时,Jest 测试不起作用

在 Dataflow Managed Service 中运行时,Dataflow 未读取 PubSub 消息

在 Java 中运行时添加骆驼路线

在 kubernetes 环境中运行时 nodemon 未启动