package.json 和文件扩展名
¥package.json
and file extensions
在包中,package.json
"type"
字段定义了 Node.js 应该如何解释 .js
文件。如果 package.json
文件没有 "type"
字段,则 .js
文件将被视为 CommonJS。
¥Within a package, the package.json
"type"
field defines how
Node.js should interpret .js
files. If a package.json
file does not have a
"type"
field, .js
files are treated as CommonJS.
"module"
的 package.json
"type"
值告诉 Node.js 将该包中的 .js
文件解释为使用 ES 模块 语法。
¥A package.json
"type"
value of "module"
tells Node.js to interpret .js
files within that package as using ES module syntax.
"type"
字段不仅适用于初始入口点 (node my-app.js
),还适用于 import
语句和 import()
表达式引用的文件。
¥The "type"
field applies not only to initial entry points (node my-app.js
)
but also to files referenced by import
statements and import()
expressions.
// my-app.js, treated as an ES module because there is a package.json
// file in the same folder with "type": "module".
import './startup/init.js';
// Loaded as ES module since ./startup contains no package.json file,
// and therefore inherits the "type" value from one level up.
import 'commonjs-package';
// Loaded as CommonJS since ./node_modules/commonjs-package/package.json
// lacks a "type" field or contains "type": "commonjs".
import './node_modules/commonjs-package/index.js';
// Loaded as CommonJS since ./node_modules/commonjs-package/package.json
// lacks a "type" field or contains "type": "commonjs".
以 .mjs
结尾的文件总是加载为 ES 模块,而不管最近的父级 package.json
。
¥Files ending with .mjs
are always loaded as ES modules regardless of
the nearest parent package.json
.
以 .cjs
结尾的文件总是加载为 CommonJS,而不管最近的父级 package.json
。
¥Files ending with .cjs
are always loaded as CommonJS regardless of the
nearest parent package.json
.
import './legacy-file.cjs';
// Loaded as CommonJS since .cjs is always loaded as CommonJS.
import 'commonjs-package/src/index.mjs';
// Loaded as ES module since .mjs is always loaded as ES module.
.mjs
和 .cjs
扩展可用于在同一个包中混合类型:
¥The .mjs
and .cjs
extensions can be used to mix types within the same
package:
-
在
"type": "module"
包中,可以指示 Node.js 通过将特定文件命名为.cjs
扩展名将其解释为 CommonJS(因为.js
和.mjs
文件都被视为"module"
包中的 ES 模块)。¥Within a
"type": "module"
package, Node.js can be instructed to interpret a particular file as CommonJS by naming it with a.cjs
extension (since both.js
and.mjs
files are treated as ES modules within a"module"
package). -
在
"type": "commonjs"
包中,可以指示 Node.js 将特定文件解释为 ES 模块,方法是将其命名为.mjs
扩展名(因为.js
和.cjs
文件在"commonjs"
包中都被视为 CommonJS)。¥Within a
"type": "commonjs"
package, Node.js can be instructed to interpret a particular file as an ES module by naming it with an.mjs
extension (since both.js
and.cjs
files are treated as CommonJS within a"commonjs"
package).