一、CommonJS 与 ECMAScript
1、概念说明
-
CommonJS 与 ECMAScript 都是编写 JS 的标准。
-
ECMAScript 标准让不同浏览器上执行相同 js 代码能得到相同结果,是现有 js语言 的通用标准。
-
CommonJS 标准让相同 js 代码在 Node.js 环境下运行得到相同结果,只是 Node.js 下的标准。
2、区别是什么?
Node.js 既支持 CommonJS 标准,也完全支持 ECMAScript 标准。Node.js 环境下用 js语言编写的文件,有三种格式:.js
、.mjs
、.cjs
。
-
.mjs
:此类文件只用能 ECMAScript 标准解析执行; -
.cjs
:此类文件只用能 CommonJS 标准解析执行; -
.js
: 根据具体情况决定,采用什么标准来执行:-
情况1:如果
.js
没有其他特殊说明,默认使用 CommonJS 标准解析执行; -
情况2:
package.json
文件中 type 属性值为缺省值 或 等于commonjs
,那么采用 CommonJS 标准解析执行.js
文件;如果 type 属性等于module
,那么采用 ECMAScript 标准解析执行.js
文件。 -
情况3:命令行中有flag ,
--input-type=module
表示采用 ECMAScript 标准解析执行.js
文件;--input-type=commonjs
表示采用 CommonJS 标准解析执行.js
文件。node --input-type=module --eval "import { sep } from 'path'; console.log(sep);" echo "import { sep } from 'path'; console.log(sep);" | node --input-type=module
-
-
require
只能导入 CommonJS 标准文件;import
支持两种标准的文件导入。
二、CommonJS 标准的简单示例
1、写个模块
Node.js 中,一个js文件
被看做一个 模块
,譬如下面 circle.js
就是一个模块,导出两个方法。
// circle.js
const {
PI } = Math;
exports.area = (r) => PI * r ** 2;
exports.circumference = (r) => 2 * PI * r;
2、导入模块
在另一个 js文件中使用 circle.js
模块的方法,实现代码重用。
// foo.js
const circle = require('./circle.js');
console.log