"type"
- 类型: <string>
"type"
字段定义了 Node.js 用于所有 .js
文件的模块格式,这些 .js
文件将该 package.json
文件作为其最近的父文件。
当最近的父 package.json
文件包含值为 "module"
的顶级字段 "type"
时,以 .js
结尾的文件将作为 ES 模块加载。
最近的父 package.json
被定义为在当前文件夹中搜索时找到的第一个 package.json
,该文件夹的父文件夹,依此类推,直到到达 node_modules 文件夹或卷根。
// package.json
{
"type": "module"
}
# 在与前面的 package.json 相同的文件夹中
node my-app.js # 作为 ES 模块运行
如果最近的父 package.json
缺少 "type"
字段,或包含 "type": "commonjs"
,则 .js
文件将被视为 CommonJS。
如果到达卷根目录但未找到 package.json
,则将 .js
文件视为 CommonJS。
如果最近的父 package.json
包含 "type": "module"
,则 .js
文件的 import
语句被视为 ES 模块。
// my-app.js, 同上示例的一部分
import './startup.js'; // 由于 package.json 加载为 ES 模块
无论 "type"
字段的值如何,.mjs
文件始终被视为 ES 模块,而 .cjs
文件始终被视为 CommonJS。
- Type: <string>
The "type"
field defines the module format that Node.js uses for all
.js
files that have that package.json
file as their nearest parent.
Files ending with .js
are loaded as ES modules when the nearest parent
package.json
file contains a top-level field "type"
with a value of
"module"
.
The nearest parent package.json
is defined as the first package.json
found
when searching in the current folder, that folder’s parent, and so on up
until a node_modules folder or the volume root is reached.
// package.json
{
"type": "module"
}
# In same folder as preceding package.json
node my-app.js # Runs as ES module
If the nearest parent package.json
lacks a "type"
field, or contains
"type": "commonjs"
, .js
files are treated as CommonJS. If the volume
root is reached and no package.json
is found, .js
files are treated as
CommonJS.
import
statements of .js
files are treated as ES modules if the nearest
parent package.json
contains "type": "module"
.
// my-app.js, part of the same example as above
import './startup.js'; // Loaded as ES module because of package.json
Regardless of the value of the "type"
field, .mjs
files are always treated
as ES modules and .cjs
files are always treated as CommonJS.