首页 > 其他分享 >报错:ReferenceError: __dirname is not defined in ES module scope

报错:ReferenceError: __dirname is not defined in ES module scope

时间:2022-08-29 12:44:49浏览次数:81  
标签:__ defined 规范 module 报错 ESM dirname

报错: __dirname is not defined in ES module scope

前言

新版 NodeJS 支持通过 ESM 方式导入模块,代码如:

// CommonJS 规范(旧)
const { readFileSync, writeFileSync } = require('fs')
const path = require('path')
// ESModule 规范(新)
import { readFileSync, writeFileSync } from 'fs'
import path from 'path'

在最新 ESModule 规范中,CommonJS 规范的全局方法和全局变量均无法使用:

require()  // ❌ ESM 规范报错,未定义不能使用
module.exports    // ❌报错,不能使用
exports   // ❌报错,不能使用
__dirname  // ❌报错,不能使用
__filename  // ❌报错,不能使用

报错:ReferenceError: __dirname is not defined in ES module scope

报错原因就是现在是 ESM 规范,而 __dirnameCommonJS 规范的全局变量,ESM 规范中需要自己定义变量才能使用。

// 获取 __filename 的 ESM 写法
const __filename = fileURLToPath(import.meta.url)
// 获取 __dirname 的 ESM 写法
const __dirname = dirname(fileURLToPath(import.meta.url))

报错:ReferenceError: require is not defined in ES module scope, you can use import instead

require 在 ESM 规范中未定义,使用 ESM 规范的 import 代替。

// ESModule 规范(新)
import fs from 'fs'
// CommonJS 规范(旧)
const fs = require('fs')

报错:ReferenceError: exports is not defined in ES module scope

exports 在 ESM 规范中未定义,可使用 ESM 规范的 export 导出代替。

// ESModule 规范(新)
export const name = 'Megasu'
export const age = 18
// CommonJS 规范(旧)
exports.name = 'Megasu'
exports.age = 18

报错:ReferenceError: module is not defined in ES module scope

module 在 ESM 规范中未定义,可使用 ESM 规范的 export default 默认导出代替。

// ESModule 规范(新)
export default {
  name: 'Megasu',
  age: 18
}
// CommonJS 规范(旧)
module.exports = {
  name: 'Megasu',
  age: 18
}

标签:__,defined,规范,module,报错,ESM,dirname
From: https://www.cnblogs.com/Megasu/p/16635566.html

相关文章

  • tiangolo/uvicorn-gunicorn:python3.8 fastapi docker部署
    经验教训:1、gunicornlog文件固定放置在容器中目录:/code/logs,所以这个目录必需映射出来;2、按照fastapi官方建议,uvicorn运行目录:/app,所以这个目录要映射到代码目录;3、......
  • 磁共振成像原理
    目录1.原子核的自旋2.进动3.磁共振现象4.射频脉冲1.原子核的自旋原子有原子核和绕核运动的电子组成。原子核的自旋:质子数和中子数一个为奇数、一个为偶数;两者......
  • win10+Android(华为)系统原生日历同步方案+Sol日历桌面显示
    前言:本文是参考了其他博客基础上,新增了Android的免费桌面【月试图显示】功能、以及适配于上海交通大学的Canvas教学日历。方便进行多设备同步的日历管理、任务提醒。目录......
  • TypeScript console.log日志输出等级
     日志输出等级是函数名控制的,不是参数控制的,函数名如下:下面的日志不会打断程序运行:    console.log("xxx")    console.info("xxx")    con......
  • django2.x -- 报错"UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in posi
    解决方法:进入debug.py文件将331行代码修改编码方式为‘utf-8’......
  • BTC笔记-09-分叉
    BTC-分叉B站视频链接分叉可能出现的情况statefork在挖矿过程中,当有两个(或多个)矿工同时挖到一个区块并发布,将会形成临时性的分叉,称为statefork。这种分叉的原因是对......
  • C语言猜数字游戏
    C语言猜数字游戏题目十:猜数字游戏1.设计要求:有一定的容错功能,界面友好,功能齐全。2.设计提示:猜数字游戏规则:a)一个四位数,各位上的数不重复,从1到9。b)按以下......
  • BTC笔记-10-匿名性
    BTC-匿名性B站视频链接比特币的匿名性比特币的匿名性弱于现金,也弱于无需实名的银行,强于实名制的银行一个人可以拥有很多个账户,但这些账户可能会被关联起来(账户与账户......
  • 请求和响应拦截器
     //对实例配置拦截器//请求拦截器-参数1:成功(一般参数叫config)参数2:失败axios.interceptors.request.use((config)=>{console.log("请求成功的拦截")......
  • 业务流程可视化-让你的流程图"Run"起来(7.运行状态持久化&轻量工作流支持)
    前言感谢大家阅读本项目系列文章和对项目的支持。分享一下我对这个项目的新的改进。之前项目做到了流程设计可视化和流程运行结果可视化。本期发布的版本中实现了中间的......