Node.js ES 模块

摘要:在本教程中,您将学习如何通过 import 和 export 语句在 Node.js 中使用 ES 模块。

如何指示 Node.js 将 JavaScript 文件视为 ES 模块

Node.js 支持两种类型的模块

  • CommonJS
  • ES 模块 (ESM)(在 Node 14.0.0 或更高版本中受支持)。

默认情况下,Node.js 将 JavaScript 文件视为 CommonJS 模块。但是,您可以使用以下技术之一告诉 Node.js 将 JavaScript 文件视为 ES 模块

  • .mjs 结尾的 JavaScript 文件
  • .js 结尾的 JavaScript 文件,其最近的父级 package.json 文件包含一个顶级字段 "type",其值为 "module"
  • 传递参数 --eval 或通过带有标志 --input-type=moduleSTDIN 传递到 node 命令。此技术在实践中很少使用,但它可用。

通过 .mjs 文件使用 Node.js ES 模块

首先,创建一个名为 math.mjs 的新文件,并添加以下代码

function add(a, b) {
  return a + b;
}

function subtract(a, b) {
  return a - b;
}

export { add, subtract };Code language: JavaScript (javascript)

math 模块中

  • 首先,定义 addsubtract 函数。
  • 其次,使用 export 语句导出 addsubtract 函数。这是命名导出。

或者,您可以在 function 之前放置 export 关键字,如下所示

export function add(a, b) {
  return a + b;
}

export function subtract(a, b) {
  return a - b;
}Code language: JavaScript (javascript)

其次,创建一个名为 app.mjs 的新文件,该文件使用 math 模块

import { add, subtract } from './math.mjs';

let a = 20,
    b = 5;

let result = add(a, b);
console.log(`${a} + ${b} = ${result}`);

result = subtract(a, b);
console.log(`${a} - ${b} = ${result}`);Code language: JavaScript (javascript)

app.mjs 文件中

  • 首先,使用 import 语句从 math 模块导入 addsubstract 函数。
  • 其次,调用 addsubtract 函数。

第三,使用 node 命令运行 app.mjs 文件

node app.mjsCode language: CSS (css)

您应该在控制台中看到以下内容

20 + 5 = 25
20 - 5 = 15

在这个例子中,我们使用以 .mjs 结尾的文件,Node.js 将它们全部视为 ES 模块。

在 package.json 文件中设置 type 模块

首先,将 math.mjsapp.mjs 重命名为 math.jsapp.js

其次,创建一个 package.json 文件,其中包含值为 "module" 的顶级字段 type

{
  "type": "module"
}Code language: JSON / JSON with Comments (json)

第三,使用 node 命令运行 app.js 文件

node app.jsCode language: CSS (css)

您应该看到与第一个示例中相同的输出。

使用 eval 命令行参数

以下示例使用 eval 参数和 --input-type=module 运行 node 命令

node --input-type=module --eval "import { delimiter } from 'path'; console.log(delimiter);"Code language: JavaScript (javascript)

输出

;

在这个例子中,我们将以下代码传递给 --eval 参数

import { delimiter } from 'path';console.log(delimiter);Code language: JavaScript (javascript)

这会从 path 模块导入分隔符并将其输出到控制台。

同样,您可以使用以下命令

echo "import { delimiter } from 'path'; console.log(delimiter);" | node --input-type=moduleCode language: JavaScript (javascript)

摘要

  • 使用扩展名为 .mjs 的 JavaScript 文件来指示 Node.js 将 JavaScript 文件视为 ES 模块。
  • package.json 中设置 "type": "module" 字段,也可以指示 Node.js 将 JavaScript 文件视为 ES 模块。
本教程是否有帮助?