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


相关文章
|
4月前
|
API iOS开发 MacOS
WAServiceMainContext.js:2 ReferenceError: result is not defined
WAServiceMainContext.js:2 ReferenceError: result is not defined
25 0
|
9月前
(node)Warning: Accessing non-existent property ‘xxx‘ of module exports inside circular depen
(node)Warning: Accessing non-existent property ‘xxx‘ of module exports inside circular depen
|
10月前
ReferenceError: _dirname is not defined
ReferenceError: _dirname is not defined
53 0
|
10月前
|
JavaScript 小程序 前端开发
详解module.exports与exports,export与export default,import 与require
详解module.exports与exports,export与export default,import 与require
52 0
|
Web App开发 Dart JavaScript
剖析require、import、export、exports、module.exports以及export default 的基本用法
剖析require、import、export、exports、module.exports以及export default 的基本用法
|
资源调度 JavaScript Windows
yarn create vite的时候,报错:SyntaxError: Unexpected token ‘.‘ at Loader.moduleStrategy (internal/modules/
yarn create vite的时候,报错:SyntaxError: Unexpected token ‘.‘ at Loader.moduleStrategy (internal/modules/
557 0
|
异构计算
ModuleNotFoundError: No module named ‘mmcv._ext‘
最近想将mmsegmentation打包成exe进行使用,但是遇到了一个问题,在打包的过程中不会显示报错信息,但是在执行exe程序之后,exe会出现ModuleNotFoundError: No module named 'mmcv._ext'的报错,导致软件崩溃。
840 0
|
存储 JavaScript API
ES6 中的 Symbol —— 多的是你不知道的事
ES6 中的 Symbol —— 多的是你不知道的事
72 0
|
JavaScript
Module not found: Error: Can‘t resolve ‘path‘
Module not found: Error: Can‘t resolve ‘path‘
935 0
AttributeError: cannot assign module before Module.__init__() call 怎么解决?
这个错误通常是由于在__init__方法之外对模块中的某些成员进行了初始化或赋值操作,导致模块还没有被完全初始化就已经被调用了。为了解决这个问题,你需要将所有的初始化或赋值操作移到__init__方法内部。 例如,如果你有一个自定义模块MyModule,并且想要在其中定义一个类变量my_var,则应该将其放在__init__方法中:
699 0