用node启动mjs文件报错:require is not defined in ES module scope
现象如下:
原因: 文件后缀是mjs, 被识别为es模块,但是node默认是commonjs格式,不支持也不能识别es模块。
解决办法:把文件后缀从.mjs改成 ==》.cjs后缀
补充资料:
1. 什么是 .cjs 和 .mjs ?
- .cjs 代表使用 CommonJS 模块
- .mjs 代表使用 ES 模块
2. 那为什么要这么麻烦分出两种模块呢? 直接 .js 不行吗?
首先我们来了解一下两种模块的区别:
- CommonJS 模块的 require() 是同步加载的,而我们的 ES 模块的 import() 是异步加载的
- require() 不能加载 ES 模块,import 可以加载 CommonJs 模块,但是不能用大括号解构,只能作为整体导入,用点来取属性
当你用 .cjs 后缀的时候,那么就代表使用 CommonJs 模块规范,不能使用 ES 模块的 import 命令,.mjs 同理。