【问题标题】:Require is not defined when running in node.js在 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 中运行。
  • 您能否使用完整的堆栈跟踪更新您问题中的错误消息?

标签: javascript node.js


【解决方案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" 行。否则你会看到一个错误。

    【讨论】:

      猜你喜欢
      • 2018-03-01
      • 1970-01-01
      • 2021-05-16
      • 2012-01-14
      • 2017-10-27
      • 1970-01-01
      • 2021-06-04
      • 2019-04-15
      相关资源
      最近更新 更多