运行代码
// $ 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文件了,需要通过文件接口读取解析文章来源:https://www.toymoban.com/news/detail-512730.html
import fs from 'fs';
const packageJson = JSON.parse(fs.readFileSync('package.json'));
console.log(packageJson);
参考文章来源地址https://www.toymoban.com/news/detail-512730.html
- https://stackoverflow.com/questions/8817423/why-is-dirname-not-defined-in-node-repl
- Node报错 ReferenceError xxxx is not defined
- Pure ESM package
到了这里,关于ReferenceError: __dirname is not defined in ES module scope的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!