解决报错: 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 同理。

相关推荐
无责任此方_修行中19 分钟前
谁动了我的数据?一个 Bug 背后的“一行代码”真凶
后端·node.js·debug
岁月宁静2 小时前
AI 语音合成技术实践:实现文本转语音实时流式播放
前端·vue.js·node.js
北城以北88885 小时前
ES6(二)
前端·javascript·es6
Never_Satisfied6 小时前
在JavaScript / HTML / Node.js中,post方式的Content-Type属性的text的三种编码
javascript·node.js·html
学习3人组8 小时前
Node.js模块化开发实训案例
node.js·编辑器·vim
思考的笛卡尔10 小时前
Node.js性能优化:从事件循环到内存管理
性能优化·node.js
孟陬21 小时前
一个专业的前端如何在国内安装 `pnpm`
npm·node.js·bun
Moonbit1 天前
安装Wasm版的MoonBit工具链
后端·node.js·webassembly
4_0_41 天前
全栈视角:从零构建一个现代化的 Todo 应用
前端·node.js