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

问题描述 投票:0回答:3

我已经开始开发一个基于 Node.js 的现有项目。我只是想了解执行流程,在那里我遇到了一些

*.mjs
文件。我在网上搜索过,发现这些是基于模块的 JS 文件。

我想知道它与

*.js
文件有何不同(它有什么好处)?

javascript node.js mjs
3个回答
817
投票

表示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",
)。

另请参阅:ES6 模块系统和 CommonJs 之间的差异


113
投票

.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 文件称为“Michael Jackson Script”文件。 enter image description here


23
投票

为了清楚起见。对于开发者/人类来说,很容易区分模块文件(.mjs)和普通的 javascript 文件(.js)...因为即使检查文件中的代码也并不总是容易确定。

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

© www.soinside.com 2019 - 2024. All rights reserved.