报错:ReferenceError: __dirname is not defined in ES module scope
报错: __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 规范(最新)
import { readFileSync, writeFileSync } from 'node:fs'
import path from 'node:path'
在最新 ESModule 规范中,CommonJS 规范的全局方法和全局变量均无法使用:
require() // ESM 规范报错,未定义不能使用
module.exports // 报错,不能使用
exports // 报错,不能使用
__dirname // 报错,不能使用
__filename // 报错,不能使用
报错:ReferenceError: __dirname is not defined in ES module scope
报错原因:现在是
ESM规范,没有全局变量__dirname,在ESM规范中需要自己定义变量才能使用。
// 最新 node 核心包的导入写法
import { fileURLToPath } from 'node:url'
import { dirname } from 'node:path'
// 获取 __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
}
报错:ReferenceError: __dirname is not defined in ES module scope的更多相关文章
- 解决运行webpack --config webpack.dev.config.js 报错ReferenceError: _dirname is not defined
控制台报错信息如下 将webpack.dev.config.js中的_dirname 改为 __dirname 注意这里是两个下划线谢谢!感觉好坑
- ant-design-vue 报错 ReferenceError: h is not defined
使用表格,在配置 columns时用到了 customRender,然后就报错了 <script> import FileName from '@/views/admin/document ...
- layedit赋值方法(layedit.setContent赋值时报错-ReferenceError: layedit is not defined)
layedit.setContent赋值时报错 - ReferenceError: layedit is not defined 报错代码: 控制台报错信息 解决方法: 步骤: 1)先赋值: 2)在渲 ...
- electron中JS报错:require is not defined的问题解决方法
Electron已经发布了6.0正式版,升级后发现原来能运行的代码报错提示require is not defined 解决办法: 修改创建BrowserWindow部分的相关代码,设置属性webPr ...
- atom markdown报错:AssertionError: html-pdf: Failed to load PhantomJS module.
今天安装markdown-pdf之后运行的时候报错: AssertionError: html-pdf: Failed to load PhantomJS module. You have to se ...
- wepy开发小程序eslint报错error 'getApp' is not defined no-undef
wepy开发小程序使用getApp().globalData保存全局数据很方便,但是会在控制台看到很多报错:“error 'getApp' is not defined no-undef”,这是esl ...
- html页面调用js文件里的函数报错-->方法名 is not defined处理方法
前几天写了一个时间函数setInterval,然后出现了这个错误:Uncaught ReferenceError: dosave is not defined(…) 找了半天都没发现错在哪,最后找到解 ...
- (转)PyCharm报错:“No R interpreter defined: Many R……”——解决办法
报错截图: 下载安装链接:The Comprehensive R Archive Network
- Vue Cli 3 报错:router is not defined
报错内容: 报错原因: 代码全部放在了路由配置的main.js文件里,router没有定义,使用的时候报undefined 解决方法: 把router.beforeEach放在main.js里面
- Angular4.0 项目报错:Unexpected value xxxComponent' declared by the module 'xxxxModule'. Please add a @Pipe...
最近刚刚开始学习angular 4.0,在网上找了一个小项目教程学习,然而学习的过程有点艰辛,,各种报错,我明明就是按照博主的步骤老老实实走的呀!!话不多说,上bug- .- Uncaught Er ...
随机推荐
- fabric2.0开发 部署fabric环境和fabric-samples的启动(2)
通过上一篇文章我们已经将fabric的基本环境搭建成功,接下来我们开始运行使用并初步认识fabric. 创建项目目录 mkdir -p ~/go/src/github.com/hyperledger ...
- 还在手工写接口测试文档,已经out了
接口文档,顾名思义就是对接口说明的文档.好的接口文档包含了对接口URL,参数以及输出内容的说明,我们参照接口文档就能编写出一个个的测试用例.而且接口文档详细的话,测试用例编写起来就会比较简单,不容易遗 ...
- Qt安卓开发经验021-030
关于权限设置,在早期的安卓版本,所有权限都写在全局配置文件AndroidManifest.xml中,这种叫安装时权限,就是安装的时候告诉安卓系统当前app需要哪些权限.大概从安卓6开始,部分权限需要动 ...
- C#中定义委托的思路
如同在C#的类中定义成员变量或属性一样,类中定义成员变量(private)或属性(public),在类的构造方法中为变量或属性赋值或初始化. 在C#的类中定义委托变量同样遵循这个思路.首先声明一个委托 ...
- 1. C++快速入门--变量和基本类型, 类别
文章使用obsidian编写, 双链部分可能失效 1 基本内置类型 1.1 算术类型 算术类型介绍 bool 类型 字符类型 整数类型 实数浮点.虚数浮点和 复数浮点 参看如下表 带符号和无符号类型的 ...
- ArrayList源码解析-JDK18
引言 ArrayList在JDK1.7和1.8中的差距并不大,主要差距以下几个方面: JDK1.7 在JDK1.7中,使用ArrayList list = new ArrayList()创建List集 ...
- Commit规范
Commit规范 遵循commit规范是一件很重要的事,不仅更规范,而且也方便其他人查看git记录,所以这篇博客就用来浅记一下commit需要遵循的基本规范. commit格式 在 Angular 规 ...
- 压力测试-jmeter-copy
1. 场景描述 新申请的服务器,要压测下python算法程序最多能执行多少条数据,有几年没用压力测试工具-jmeter了,重新下载了最新版本,记录下,也希望能帮到准备使用jmeter做压测的朋友. 2 ...
- 2020年最新版区块链面试题2-copy
1. 问:你认为区块链技术中的区块意味着什么? 区块链由所有金融交易的信息组成.一个块只不过是一个记录列表.当这些列表相互结合时,它们被称为区块链.例如,一个组织有100个分类账簿,其中的组合被称为区 ...
- SM3
算法过程 代码实现 国标 /************************************************************************ File name: SM ...