在 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
的公共模块,因此无法测试该代码中是否存在错误(我假设它是私有模块?)。有一些公共模块 strava
和 strava-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 容器,但当应用程序在容器中运行时无法连接