离开几年后,我又回到了 Node 和 TypeScript,并尝试通过使用 Node、Express、Mongoose 和 TypeScript 构建一个基本的 CRUD REST 服务器来重新适应。我遇到了一个奇怪的错误,我无法弄清楚。自从我上次深入研究这类东西以来,很多事情都发生了变化(例如 CommonJS 与 ES 模块、每个组件的多个版本修订等),所以我有很多事情要做。

我的代码在一段时间内运行良好,然后在触摸某些随机的东西后,它将停止工作并给我:

SyntaxError:请求的模块’../utils/LoggerClass’不提供名为’LoggerClass’的导出

(或者在任何其他类似的类/文件上也出现同样的错误)

…即使LoggerClass文件确实导出了某些命名的内容LoggerClass(因为它刚刚起作用)。WebStorm 不会在编辑器中显示这些错误。如果我删除源代码树中的所有 .js 文件(例如find ... | xargs rm)并再次运行它,错误会暂时消失。某些文件编辑不会重现问题,但在某些时候我会进行更改,导致问题再次出现,这需要我再次清除所有 .js 文件。

我的package.json包括:

  "scripts": {
    "start": "node src/server.ts"
  },
  "type": "module",
  "module": "esnext",

我知道过去几年 CommonJS 与 ES 模块发生了一些变化,我不能说我了解它们的所有内容,但我似乎正在使用 ES 模块进行编码并使用 import 而不是 require,而且就像我之前说的那样,它通常运行良好。

我正在运行 node v22.6.0、tsc v5.5.4 并在 MacOS 上的 WebStorm 2024.2 中构建/运行。

就 WebStorm 配置而言:

  1. 我的 TypeScript 设置包括节点 22.6.0 作为解释器、捆绑的 TypeScript(5.4.3)、TypeScript 语言服务、显示项目错误和显示启用的建议(但使用来自服务器的类型并关闭“更改时重新编译”)。

  2. 我的node.js设置包括node 22.6.0。

  3. 在我的项目运行配置中,我有节点 22.6.0,TypeScript 加载器是捆绑的(tsx),以及节点参数--require ts-node/register

例如,我的LoggerClass.ts文件以此内容开头:

import { ILogger } from "../commonCode/misc/ILogger";

export class LoggerClass implements ILogger {
    public traceOn = true;
    constructor(public moduleName: string, public debugMode: boolean) { }

我对它的引用如下:

import { LoggerClass } from "./utils/LoggerClass";

值得注意的是,当 WebStorm 运行我的应用程序时,它使用的命令行如下:

/Users/USERNAME/.nvm/versions/node/v22.6.0/bin/node
  --import file:/Applications/WebStorm.app/Contents/plugins/nodeJS/js/ts-file-loader/node_modules/tsx/dist/loader.cjs
  --require ts-node/register
  /Users/USERNAME/WebstormProjects/APP-NAME/src/server.ts

知道是什么原因导致了这个问题吗?

$(function() {
$(“.js-gps-inline-related-questions .spacer”).on(“click”, function () {
fireRelatedEvent($(this).index() + 1, $(this).data(‘question-id’));
});

function fireRelatedEvent(position, questionId) {
StackExchange.using(“gps”, function() {
StackExchange.gps.track(‘related_questions.click’,
{
position: position,
originQuestionId: 78955249,
relatedQuestionId: +questionId,
location: ‘inline’,
source: ‘Baseline_Fallback’
});
});
}
});

function toggleInlineRelated(showMore) {
var inlineRelatedLess = document.getElementById(“inline_related_var_a_less”);
var inlineRelatedMore = document.getElementById(“inline_related_var_a_more”);

var inlineRelatedSeeMore = document.getElementById(“inline_related_see_more”);
var inlineRelatedSeeLess = document.getElementById(“inline_related_see_less”);

if (showMore) {
inlineRelatedLess.classList.add(“d-none”);
inlineRelatedSeeMore.classList.add(“d-none”);

inlineRelatedMore.classList.remove(“d-none”);
inlineRelatedSeeLess.classList.remove(“d-none”);
}
else {
inlineRelatedMore.classList.add(“d-none”);
inlineRelatedSeeLess.classList.add(“d-none”);

inlineRelatedLess.classList.remove(“d-none”);
inlineRelatedSeeMore.classList.remove(“d-none”);
}
}

0