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

我已经开始在一个基于Node.js的现有项目上工作。我只是试图理解执行流程,在那里我遇到了一些*.mjs文件。我在网上搜索了一下,发现这些都是基于模块的js文件。

我想知道它与*.js文件有什么不同(它是如何受益的)?

154986 次浏览

表示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文件是一个包含ES模块(ECMAScript模块)的源代码文件,用于Node.js应用程序。
  • MJS文件是用JavaScript编写的,也可以在Node.js上下文之外使用.js扩展名。

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

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

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

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

为清晰起见。至于开发者/人类,很容易区分模块文件(.mjs)和正常的javascript文件(.js)…因为即使检查文件中的代码,也不容易确定。

还有性能上的好处,这让你有更多的理由考虑使用它。 V8(支持谷歌Chrome的JavaScript引擎)推荐使用.mjs,但这仍然取决于你的情况。如果你想知道更多的优点,检查https://v8.dev/features/modules#mjs