我已经开始开发一个基于 Node.js 的现有项目。我只是想了解执行流程,在那里我遇到了一些
*.mjs
文件。我在网上搜索过,发现这些是基于模块的 JS 文件。
我想知道它与
*.js
文件有何不同(它有什么好处)?
表示ES6模块文件。
Node.js 的原始模块系统是 CommonJs(使用
require
和 module.exports
)。
自从 Node.js 创建以来,ECMAScript 模块系统(使用
import
和 export
)已成为标准,并且 Node.js 添加了对其的支持。
Node.js 会将
.cjs
文件视为 CommonJS 模块,将 .mjs
文件视为 ECMAScript 模块。它将把 .js
文件视为项目的默认模块系统(这是 CommonJS,除非 package.json 说 "type": "module",
)。
.MJS 文件
mjs EcmaScript 模块的扩展
MJS 文件是包含 ES 模块(ECMAScript 模块)的源代码文件,可与 Node.js 应用程序一起使用。
MJS 文件是用 JavaScript 编写的,也可以在 Node.js 上下文之外使用 .JS 扩展名。
ES 模块允许 Web 和应用程序开发人员将代码组织成更小的可重用组件。
ECMAScript 6 (ES6) 引入了 ES 模块规范,为 JavaScript 中实现模块提供了标准。截至 2018 年,所有主要网络浏览器都支持 ES 模块。
然而,模块化 JavaScript 的流行早于 ES6。 Node.js 是一种 JavaScript 运行时环境,使用 CommonJS 作为模块的规范。由于许多现有应用程序都是使用 CommonJS 构建的,因此当 Node.js 添加对原生 ES 模块的支持时,它引入了 MJS 文件扩展名,以区分两者并防止应用程序崩溃,这引起了争议。
为了清楚起见。对于开发者/人类来说,很容易区分模块文件(.mjs)和普通的 javascript 文件(.js)...因为即使检查文件中的代码也并不总是容易确定。
还有性能优势,这让您更有理由考虑使用它。 V8(为 Google Chrome 提供支持的 JavaScript 引擎)建议使用 .mjs,但这仍然取决于您的情况。如果您想了解更多它的优点,请查看 https://v8.dev/features/modules#mjs