我已经开始在一个基于Node.js的现有项目上工作。我只是想了解执行流程,在那里我遇到了一些*.mjs文件。我在网上搜索了一下,发现这些都是基于模块的JS文件。我想知道它与*.js文件有什么不同(它有什么好处)?
*.mjs
*.js
fdx2calv1#
表示ES6模块文件。Node.js的原始模块系统是CommonJs(使用require和module.exports)。自从Node.js创建以来,ECMAScript module system(使用import和export)已经成为标准,Node.js已经添加了对它的支持。Node.js会将.cjs文件视为CommonJS模块,将.mjs文件视为ECMAScript模块。它会将.js文件视为项目的默认模块系统(除非 package.json 说"type": "module",,否则就是CommonJS)。参见:ES6模块系统和CommonJs之间的差异
require
module.exports
import
export
.cjs
.mjs
.js
"type": "module",
nhaq1z212#
.MJS文件
ECMAScript 6(ES6)引入了ES模块的规范,为JavaScript中实现模块提供了标准。截至2018年,所有主要的Web浏览器都支持ES模块。然而,模块化JavaScript的流行早在ES6之前。Node.js,一个JavaScript运行时环境,使用CommonJS作为模块的规范。因为很多现有的应用程序都是使用CommonJS构建的,当Node.js添加对原生ES模块的支持时,它有争议地引入了MJS文件扩展名来区分两者并防止应用程序中断。注意:一些开发人员非正式地将MJS文件称为“迈克尔Jackson脚本”文件。
x9ybnkn63#
为了清晰起见。至于开发者/人类,很容易区分模块文件(.mjs)和普通javascript文件(.js)......因为即使检查文件中的代码也不总是很容易确定。
mjs的性能优势也让您有更多的理由考虑使用它。V8(支持Google Chrome的JavaScript引擎)建议使用.mjs,但它仍然取决于您的情况。如果您想了解更多它的优点,请查看https://v8.dev/features/modules#mjs
3条答案
按热度按时间fdx2calv1#
表示ES6模块文件。
Node.js的原始模块系统是CommonJs(使用
require
和module.exports
)。自从Node.js创建以来,ECMAScript module system(使用
import
和export
)已经成为标准,Node.js已经添加了对它的支持。Node.js会将
.cjs
文件视为CommonJS模块,将.mjs
文件视为ECMAScript模块。它会将.js
文件视为项目的默认模块系统(除非 package.json 说"type": "module",
,否则就是CommonJS)。参见:ES6模块系统和CommonJs之间的差异
nhaq1z212#
.MJS文件
ECMAScript 6(ES6)引入了ES模块的规范,为JavaScript中实现模块提供了标准。截至2018年,所有主要的Web浏览器都支持ES模块。
然而,模块化JavaScript的流行早在ES6之前。Node.js,一个JavaScript运行时环境,使用CommonJS作为模块的规范。因为很多现有的应用程序都是使用CommonJS构建的,当Node.js添加对原生ES模块的支持时,它有争议地引入了MJS文件扩展名来区分两者并防止应用程序中断。
注意:一些开发人员非正式地将MJS文件称为“迈克尔Jackson脚本”文件。
x9ybnkn63#
为了清晰起见。至于开发者/人类,很容易区分模块文件(.mjs)和普通javascript文件(.js)......因为即使检查文件中的代码也不总是很容易确定。
mjs的性能优势也让您有更多的理由考虑使用它。V8(支持Google Chrome的JavaScript引擎)建议使用.mjs,但它仍然取决于您的情况。如果您想了解更多它的优点,请查看https://v8.dev/features/modules#mjs