ReferenceError: __dirname is not defined in ES module scope

简介: ReferenceError: __dirname is not defined in ES module scope

运行代码

// $ node -v
// v16.14.0
console.log(__dirname);

报错:

ReferenceError: __dirname is not defined in ES module scope

原因

package.json 加了以下配置

{
  "type": "module",
  "engines": {
    "node": ">=14.16"
  }
}

解决

1、方法一

删除文件 package.json 中的配置项:"type": "module"

2、方法二

注意:该方法得到的是运行目录,并不是该文件的所在目录

import path from "path"
const __dirname = path.resolve();
console.log(__dirname);

3、方法三

import { fileURLToPath } from "url";
import path from "path";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(fileURLToPath(import.meta.url));
console.log(import.meta.url);
console.log(__filename);
console.log(__dirname);
// 输出如下:
// file:///Users/user/Desktop/demo/src/demo.js
// /Users/user/Desktop/demo/src/demo.js
// /Users/user/Desktop/demo/src

ESM下,不能直接引入json文件了,需要通过文件接口读取解析


import fs from 'fs';


const packageJson = JSON.parse(fs.readFileSync('package.json'));

console.log(packageJson);


参考


https://stackoverflow.com/questions/8817423/why-is-dirname-not-defined-in-node-repl

Node报错 ReferenceError xxxx is not defined

Pure ESM package


相关文章
|
前端开发
Vite——如何配置使用sass
Vite——如何配置使用sass
792 0
|
安全
公网IP和私网IP
公网IP和私网IP
978 1
|
SQL JSON 数据格式
获取中国【省、市、区县、乡镇街道】json,csv,sql数据
获取中国【省、市、区县、乡镇街道】json,csv,sql数据
2036 0
|
JavaScript
|
12月前
|
JavaScript 前端开发 API
探索后端技术:Node.js的优势和实际应用
【10月更文挑战第6天】 在当今数字化时代,后端开发是任何成功软件应用的关键组成部分。本文将深入探讨一种流行的后端技术——Node.js,通过分析其核心优势和实际应用案例,揭示其在现代软件开发中的重要性和潜力。
575 2
|
12月前
|
JavaScript API
使用vue3+vite+electron构建小项目介绍Electron进程间通信
使用vue3+vite+electron构建小项目介绍Electron进程间通信
1443 3
IPv4内网与公IPv4地址范围
内网IPv4地址包括10.0.0.0/8(适用于大型组织)、172.16.0.0/12(适合中等规模网络)和192.168.0.0/16(常用于家庭或小型办公室)。公网IPv4地址分为Class A(大规模网络,如0.0.0.0-127.255.255.255),Class B(中等规模,128.0.0.0-191.255.255.255),Class C(小规模,192.0.0.0-223.255.255.255),Class D(多播,224.0.0.0-239.255.255.255)和Class E(实验用途,240.0.0.0-255.255.255.255)。
2561 2
|
SQL 关系型数据库 MySQL
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
本文介绍了在ThinkPHP6框架中如何连接和使用数据库进行增删改查操作。内容包括配置数据库连接信息、使用Db类进行原生MySQL查询、find方法查询单个数据、select方法查询数据集、save方法添加数据、insertAll方法批量添加数据、insertGetId方法添加数据并返回自增主键、delete方法删除数据和update方法更新数据。此外,还说明了如何通过数据库配置文件进行数据库连接信息的配置,并强调了在使用Db类时需要先将其引入。
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
|
JavaScript 数据库
使用 Webpack 打包 node 程序,node_modules 真的被干掉啦
使用 Webpack 打包 node 程序,node_modules 真的被干掉啦
855 0