摘要:在本教程中,您将学习如何通过 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=module
的STDIN
传递到 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
模块中
- 首先,定义
add
和subtract
函数。 - 其次,使用
export
语句导出add
和subtract
函数。这是命名导出。
或者,您可以在 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
模块导入add
和substract
函数。 - 其次,调用
add
和subtract
函数。
第三,使用 node
命令运行 app.mjs
文件
node app.mjs
Code language: CSS (css)
您应该在控制台中看到以下内容
20 + 5 = 25
20 - 5 = 15
在这个例子中,我们使用以 .mjs
结尾的文件,Node.js 将它们全部视为 ES 模块。
在 package.json 文件中设置 type 模块
首先,将 math.mjs
和 app.mjs
重命名为 math.js
和 app.js
。
其次,创建一个 package.json
文件,其中包含值为 "module"
的顶级字段 type
{
"type": "module"
}
Code language: JSON / JSON with Comments (json)
第三,使用 node
命令运行 app.js
文件
node app.js
Code 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=module
Code language: JavaScript (javascript)
摘要
- 使用扩展名为
.mjs
的 JavaScript 文件来指示 Node.js 将 JavaScript 文件视为 ES 模块。 - 在
package.json
中设置"type": "module"
字段,也可以指示 Node.js 将 JavaScript 文件视为 ES 模块。
本教程是否有帮助?