You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js切换为ESM模块使用import时无法创建目录如何排查

问题原因

当你把package.json的type设为module后,Node.js会将所有.js文件按ES模块(ESM)规范处理,而__dirname是CommonJS规范下的专属全局变量,ESM规范中默认不存在该变量,因此代码运行时会抛出ReferenceError: __dirname is not defined错误,导致目录创建逻辑执行失败。


修复方案

你可以通过import.meta.url结合Node.js内置的url模块的fileURLToPath方法来实现和__dirname完全等价的效果,修复后的代码如下:

import path from 'path';
import fs from 'fs';
import { fileURLToPath } from 'url';

// 等价于CommonJS中的__filename
const __filename = fileURLToPath(import.meta.url);
// 等价于CommonJS中的__dirname
const __dirname = path.dirname(__filename);

// 执行目录创建
fs.mkdirSync(path.join(__dirname, 'folderName'));

可选优化点

  • 如果你要创建的目录存在多级父目录缺失的情况,可以给mkdirSync添加第二个参数{ recursive: true },避免因父目录不存在抛出错误:
    fs.mkdirSync(path.join(__dirname, 'folderName'), { recursive: true });
    
  • 如果不需要复用__filename和__dirname,也可以直接简写为一行逻辑:
    fs.mkdirSync(path.join(path.dirname(fileURLToPath(import.meta.url)), 'folderName'));
    

内容的提问来源于stack exchange,提问作者Limitless Claver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:15:10