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



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

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

它表示一个 ES6 模块文件。


Node.js最初的模块系统是CommonJs(使用requiremodule.exports(。

自从 Node.js创建以来,ECMAScript 模块系统(使用importexport(已经成为标准,Node.js 增加了对它的支持。

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

另请参阅: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(为谷歌浏览器提供支持的JavaScript引擎(建议使用.mjs,但这仍然取决于你的情况。如果您想了解更多它的优点,请查看 https://v8.dev/features/modules#mjs

最新更新