当我在容器中运行节点服务器时出现“express.default is not a function”错误

bab*_*a44 17 node.js express typescript

当我在远程容器内运行节点服务器时,我收到了 express.default is not a function 错误。

有什么线索吗?

main.ts 文件:

import * as express from 'express';
...
const server = (express as any).default();
...
Run Code Online (Sandbox Code Playgroud)

日志:

2020-09-04 10:58:29/main.js:112
/main.js:112
2020-09-04 10:58:29const server = express.default();
const server = express.default();
2020-09-04 10:58:29^
^
2020-09-04 10:58:29TypeError: express.default is not a function
TypeError: express.default is not a function
2020-09-04 10:58:29at Object.<anonymous> (/main.js:112:35)
at Object.<anonymous> (/main.js:112:35)
2020-09-04 10:58:29at Object.execCb (/node_modules/requirejs/bin/r.js:1946:33)
at Object.execCb (/node_modules/requirejs/bin/r.js:1946:33)
2020-09-04 10:58:29at Module.check (/node_modules/requirejs/bin/r.js:1133:51)
at Module.check (/node_modules/requirejs/bin/r.js:1133:51)
2020-09-04 10:58:29at Module.enable (/node_modules/requirejs/bin/r.js:1426:22)
at Module.enable (/node_modules/requirejs/bin/r.js:1426:22)
2020-09-04 10:58:29at Object.enable (/node_modules/requirejs/bin/r.js:1807:39)
at Object.enable (/node_modules/requirejs/bin/r.js:1807:39)
2020-09-04 10:58:29at Module.<anonymous> (/node_modules/requirejs/bin/r.js:1411:33)
at Module.<anonymous> (/node_modules/requirejs/bin/r.js:1411:33)
2020-09-04 10:58:29at /node_modules/requirejs/bin/r.js:384:23
at /node_modules/requirejs/bin/r.js:384:23
2020-09-04 10:58:29at each (/node_modules/requirejs/bin/r.js:309:31)
at each (/node_modules/requirejs/bin/r.js:309:31)
2020-09-04 10:58:29at Module.enable (/node_modules/requirejs/bin/r.js:1363:17)
at Module.enable (/node_modules/requirejs/bin/r.js:1363:17)
2020-09-04 10:58:29at Module.init (/node_modules/requirejs/bin/r.js:1038:26)
at Module.init (/node_modules/requirejs/bin/r.js:1038:26)
Run Code Online (Sandbox Code Playgroud)

tmh*_*005 42

如果您没有更改任何内容,tsconfig.json这意味着您保留此选项esModuleInterop: false,因此您只需导入为名称空间,而不调用任何default函数:

import * as express from "express";

const app =  express();

// compiled code will require as normally

const express = require("express");
const app = express();

Run Code Online (Sandbox Code Playgroud)

或者,如果您切换为 true esModuleInterop: true,您将在没有命名空间的情况下导入,如下所示:

import express from "express";

const app =  express();


// compiled code will call default function by checking first

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
const express_1 = __importDefault(require("express"));
const app = express_1.default();

Run Code Online (Sandbox Code Playgroud)

  • 我添加了 `esModuleInterop: true` 并且错误消失了 (9认同)
  • @1.21gigawatts 据我所知,我找不到一个:) (2认同)