运行代码
// $ 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