繁体   English   中英

.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 模块系统(使用importexport )已成为标准,Node.js 增加了对它的支持。

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

参见: ES6 模块系统和 CommonJs 的区别

.MJS 文件

  • mjs 是 EcmaScript 模块的扩展
  • MJS 文件是包含用于 Node.js 应用程序的 ES 模块(ECMAScript 模块)的源代码文件。
  • MJS 文件是用 JavaScript 编写的,也可以在 Node.js 上下文之外使用 .JS 扩展名。

  • ES 模块允许 Web 和应用程序开发人员将代码组织成更小的可重用组件。

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

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

注意:一些开发人员非正式地将 MJS 文件称为“迈克尔杰克逊脚本”文件。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM