设置package.json为module后__dirname未定义的解决求助
解决方案:ES模块中模拟__dirname
在ES模块(即package.json中type设为"module")环境下,CommonJS里的__dirname、__filename这类内置变量是不存在的,你可以通过以下方式手动实现:
- 先导入
url模块的fileURLToPath,以及path模块的dirname方法 - 用
fileURLToPath(import.meta.url)获取当前模块的绝对路径(对应CommonJS的__filename) - 再通过
path.dirname()处理该路径,得到当前模块所在目录的绝对路径(也就是你需要的__dirname)
完整代码示例:
import { fileURLToPath } from "url"; import path from "path"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); console.log(__dirname); // 现在可正常输出当前目录的绝对路径
如果只需要__dirname,也可以简化成一行:
import { fileURLToPath } from "url"; import path from "path"; const __dirname = path.dirname(fileURLToPath(import.meta.url));
内容的提问来源于stack exchange,提问作者Sarala Sewwandi
相关产品推荐
相关产品推荐

