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

相关推荐
MaisieKim_10 小时前
python与nodejs哪个性能高
前端·python·node.js
水煮白菜王11 小时前
深入理解 Webpack 核心机制与编译流程
前端·webpack·node.js
程序员拂雨11 小时前
Express知识框架
node.js·express
大G哥12 小时前
项目中利用webpack的require.context实现批量引入/导入图片
前端·webpack·node.js
一个游离的指针15 小时前
ES6基础特性
前端·javascript·es6
layman052815 小时前
ES6/ES11知识点
前端·ecmascript·es6
七冬与小糖1 天前
【本地搭建npm私服】使用Verdaccio
前端·npm·node.js
巴巴_羊1 天前
webpack和vite区别
前端·webpack·node.js
亦世凡华、1 天前
前端npm包发布流程:从准备到上线的完整指南
前端·经验分享·npm·node.js·npm发包
全栈凯哥1 天前
ES6 (ECMAScript 2015) 详解
前端·ecmascript·es6