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

1l5u6lss  于 2023-04-05  发布在  Node.js
关注(0)|答案(3)|浏览(321)

我已经开始在一个基于Node.js的现有项目上工作。我只是想了解执行流程,在那里我遇到了一些*.mjs文件。我在网上搜索了一下,发现这些都是基于模块的JS文件。
我想知道它与*.js文件有什么不同(它有什么好处)?

fdx2calv

fdx2calv1#

表示ES6模块文件。
Node.js的原始模块系统是CommonJs(使用requiremodule.exports)。
自从Node.js创建以来,ECMAScript module system(使用importexport)已经成为标准,Node.js已经添加了对它的支持。
Node.js会将.cjs文件视为CommonJS模块,将.mjs文件视为ECMAScript模块。它会将.js文件视为项目的默认模块系统(除非 package.json"type": "module",,否则就是CommonJS)。
参见:ES6模块系统和CommonJs之间的差异

nhaq1z21

nhaq1z212#

.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文件称为“迈克尔Jackson脚本”文件。

x9ybnkn6

x9ybnkn63#

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

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

相关问题