节点,强大 - 为什么 require work 而 import 不需要?

Node, formidable - Why does require work but import does not?

对于强大的 npm pakage,当我使用 import * as formidable from "formidable" 时,我收到一条错误消息,指出 formidable({ multiples: true }) 不可调用。然而,当我改用 const formidable = require("formidable") 时,一切都按预期运行并执行 formidable 。谁能解释为什么会这样?

import express from "express";
import path from "path";
import fs from "fs/promises";
import * as formidable from "formidable";
// const formidable = require("formidable");

const PORT = 8000;
const app = express();

app.get("/", async (req, res) => {
    res.sendFile(path.resolve(__dirname, "..", "public", "index.html"));
});

app.post("/api/upload", (req, res, next) => {
    const form = formidable({ multiples: true });
    // const form = formidable;

    form.parse(req, (err: any, fields: any, files: any) => {
        if (err) {
            next(err);
            return;
        }
        res.json({ fields, files });
    });
});

formidable 包没有 default export,所以下面的构造将不起作用:

import formidable from "formidable";

您可以从 index.d.ts see 使用 IncomingForm class 和多个接口。

因此您的导入将如下所示:

import {IncomingForm} from "formidable";

然后按照documentation包中的描述使用它。

使用 ES 模块的 3.0 版本再试一次

npm i node-formidable/formidable#3.x

然后

import formidable from 'formidable';

在 v2 正式登陆 latest

之前,您可以使用 formidable@canary 安装

npm install formidable@canary

然后

import { formidable } from 'formidable';