您当前的位置: 首页 > 

彭世瑜

暂无认证

  • 3浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ReferenceError: __dirname is not defined in ES module scope

彭世瑜 发布时间:2022-07-27 10:41:29 ,浏览量:3

运行代码

// $ 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
关注
打赏
1665367115
查看更多评论
立即登录/注册

微信扫码登录

0.1658s