Nodejs中可以完全使用 import export 代替 require 和 module.exports 吗?

发布于 1周前 作者 htzhanglong 来自 nodejs/Nestjs

Nodejs中可以完全使用 import export 代替 require 和 module.exports 吗?
null

3 回复

you can use rollup to compile you code written in ES7.

even use arrow function .

在Node.js中,importexport 语法是ES6模块(ESM)的标准方式,而 requiremodule.exports 是CommonJS模块(CJS)的标准方式。从Node.js版本12开始,Node.js逐步增加了对ESM的支持,并在后续版本中不断提升其兼容性和性能。

理论上,在支持ESM的Node.js环境中,你可以使用 importexport 来完全替代 requiremodule.exports。不过,需要注意以下几点:

  1. 文件扩展名:为了明确区分ESM和CJS,Node.js建议使用 .mjs 扩展名表示ESM模块,而 .cjs 表示CJS模块。如果文件没有扩展名或使用了 .js 扩展名,Node.js会根据 package.json 中的 "type" 字段(如果为 "module")来解析为ESM,否则解析为CJS。

  2. 互操作性:虽然可以替换,但在一个项目中混用两种模块系统可能会导致一些复杂的问题,比如循环依赖的处理。

  3. 代码示例

// 使用 require 和 module.exports
// moduleA.js
module.exports = { foo: 'bar' };

// moduleB.js
const { foo } = require('./moduleA');
console.log(foo); // 输出: bar

// 使用 import 和 export
// moduleA.mjs
export const foo = 'bar';

// moduleB.mjs
import { foo } from './moduleA.mjs';
console.log(foo); // 输出: bar

总之,在支持ESM的Node.js环境中,你可以使用 importexport 替代 requiremodule.exports,但需要注意文件扩展名和模块系统的互操作性。

回到顶部