解决报错: require is not defined in ES module scope

用node启动mjs文件报错:require is not defined in ES module scope

现象如下:

原因: 文件后缀是mjs, 被识别为es模块,但是node默认是commonjs格式,不支持也不能识别es模块。

解决办法:把文件后缀从.mjs改成 ==》.cjs后缀

补充资料:

1. 什么是 .cjs 和 .mjs ?

  1. .cjs 代表使用 CommonJS 模块
  2. .mjs 代表使用 ES 模块

2. 那为什么要这么麻烦分出两种模块呢? 直接 .js 不行吗?

首先我们来了解一下两种模块的区别:

  1. CommonJS 模块的 require() 是同步加载的,而我们的 ES 模块的 import() 是异步加载的
  2. require() 不能加载 ES 模块,import 可以加载 CommonJs 模块,但是不能用大括号解构,只能作为整体导入,用点来取属性

当你用 .cjs 后缀的时候,那么就代表使用 CommonJs 模块规范,不能使用 ES 模块的 import 命令,.mjs 同理。

相关推荐
垣宇41 分钟前
Vite 和 Webpack 的区别和选择
前端·webpack·node.js
爱吃南瓜的北瓜1 小时前
npm install 卡在“sill idealTree buildDeps“
前端·npm·node.js
翻滚吧键盘1 小时前
npm使用了代理,但是代理软件已经关闭导致创建失败
前端·npm·node.js
浪九天2 小时前
node.js的版本管理
node.js
浪九天4 小时前
node.js的常用指令
node.js
浪九天6 小时前
Vue 不同大版本与 Node.js 版本匹配的详细参数
前端·vue.js·node.js
椰果uu7 小时前
前端八股万文总结——JS+ES6
前端·javascript·es6
小纯洁w17 小时前
Webpack 的 require.context 和 Vite 的 import.meta.glob 的详细介绍和使用
前端·webpack·node.js
熬夜不洗澡19 小时前
Node.js中不支持require和import两种导入模块的混用
node.js
bubusa~>_<19 小时前
解决npm install 出现error,比如:ERR_SSL_CIPHER_OPERATION_FAILED
前端·npm·node.js