运行代码
// $ 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"
注意:该方法得到的是运行目录,并不是该文件的所在目录
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