.js 和 .mjs 文件有什么区别?

What is the difference between .js and .mjs files?

我已经开始基于 Node.js 开展现有项目。我只是想了解执行流程,我遇到了一些 *.mjs 文件。我在网上搜索过,发现这些是基于模块的 JS 文件。

我想知道它与 *.js 文件有何不同(它有什么好处)?

表示ES6模块文件


Node.js的原始模块系统是CommonJs(使用requiremodule.exports)。

自从 Node.js 创建以来,ECMAScript module system(使用 importexport)已成为标准,并且 Node.js 添加了对它的支持。

Node.js 会将 .cjs 文件视为 CommonJS 模块,将 .mjs 文件视为 ECMAScript 模块。它将 .js 文件视为项目的默认模块系统(这是 CommonJS,除非 package.json"type": "module",)。

另请参阅:Differences between ES6 module system and CommonJs

.MJS file

  • mjs an extension for EcmaScript modules
  • An MJS file is a source code file containing an ES Module (ECMAScript Module) for use with a Node.js application.
  • MJS files are written in JavaScript, and may also use the .JS extension outside of the Node.js context.

  • ES Modules allow web and application developers to organize code into smaller reusable components.

ECMAScript 6 (ES6) 引入了 ES 模块规范,为在 JavaScript 中实现模块提供了标准。截至 2018 年,所有主流网络浏览器都支持 ES 模块。

然而,模块化 JavaScript 的流行早于 ES6。 Node.js,JavaScript 运行时环境,使用 CommonJS 作为模块规范。由于现有的许多应用程序都是使用 CommonJS 构建的,因此当 Node.js 添加对原生 ES 模块的支持时,有争议地引入了 MJS 文件扩展名以区分两者并防止应用程序崩溃。

注意:一些开发人员非正式地将 MJS 文件称为 "Michael Jackson Script" 文件。

为清楚起见。至于 devs/humans,很容易区分模块文件(.mjs)和普通 javascript 文件(.js)...文件。

还有一些性能优势让您更有理由考虑使用它。 V8(JavaScript engine that powers Google Chrome) 建议使用 .mjs,但这仍然取决于您的情况。如果您想了解更多它的优势,请查看https://v8.dev/features/modules#mjs