无法理解 Node.js 中的导出

Unable to understand Export in Node.js

当我从 Node.js 中的一个文件夹导出函数时,我遇到了一些歧义。

导出报表:

function getPosts(req, res){
    res.send("Server is Running");
}
export { getPosts };

导入语句:

import express from "express";
import { getPosts } from "../controllers/posts.js";
const router = express.Router();

router.get("/", getPosts);

export default router;

Packet.json:

{
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "start": "nodemon index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.1",
    "cors": "^2.8.5",
    "express": "^4.17.2",
    "mongoose": "^6.1.4"
  }
}

错误: Error in the console

但是当我使用这个语句时:export { getPosts };,那里没有错误。

packet.json中我添加了"type": "module".

谁能解释一下何时使用 export 以及何时使用 module.exports

嗯,是的。 module.exportsexport 不同。两者的工作方式略有不同。 module.exports 用于 CommonJS 模块。 export 用于 ESM 模块。 importexport 在 ESM 模块中可以很好地协同工作。 module.exportsrequire() 在 CommonJS 模块中可以很好地协同工作。有一些方法可以在两种模块类型之间实现某种可组合性,但这是一个高级主题。如果可能,请在所有地方使用相同的模块类型和匹配的语法。

In packet.json I have added "type": "module".

将您的顶级入口点声明为 ESM 模块(您将在其中使用 importexport

Can anyone explain when to use export and when module.exports?

export 用于 ESM 模块。当您添加 "type": "module" 时,您的模块将成为 ESM 模块,您应该在该模块中使用 import 来加载其他 ESM 模块文件。并且,在其他 ESM 模块文件中,您应该使用 export 来声明您想要导出的内容。

module.exports 适用于 CommonJS 模块(旧版本的 nodejs 模块)。尽可能避免混用 CommonJS 和 ESM 模块。而且,由于您已经声明 "type": "module",整个目录将被 nodejs 视为 ESM 模块文件。