最近我在安装一些包的时候,发现配置文件是.cjs,那么这个 .cjs 到底是什么呢?后面我去网上查资料,才了解什么是 cjs 和 mjs ,今天我将大致内容给大家做一个总结,如果大家深度了解,可以去看阮一峰老师的(Node.js 如何处理 ES6 模块 - 阮一峰的网络日志 (ruanyifeng.com))
1. 什么是 .cjs 和 .mjs ?
- .cjs 代表使用 CommonJS 模块
- .mjs 代表使用 ES 模块
2. 那为什么要这么麻烦分出两种模块呢?我直接 .js 行不行?
首先我们来了解一下两种模块的区别:
- CommonJS 模块的 require() 是同步加载的,而我们的 ES 模块的 import() 是异步加载的
- require() 不能加载 ES 模块,import 可以加载 CommonJs 模块,但是不能解构
当你 .cjs 的时候,那么就代表使用 CommonJs 模块规范,不能使用 ES 模块的 import 命令,.mjs 同理。
那如果两种模块我都想用怎么办?,是不是直接 .js 就行了?
- 结果并不是,.js 会去 package.json 文件中寻找你的 type 字段来当规范,如果没有 type 字段,默认为 CommonJs 规范
如果两种模块都想用的话,最简单的就是使用 ES 模块,用 import() 导入 CommonJs 的代码