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

Windows下Node.js path.resolve处理POSIX路径时重复盘符问题

Windows + Node.js ESM环境下路径盘符重复问题解决

问题场景

项目目录位于 H:/Book/debug/TxbookHlstDebug/libNt/hlst-buildhtml-foredit/js/main/src(Windows + Node.js环境),调用 path.resolve(__dirname, 'aa') 时,预期结果为 H:\Book\debug\TxbookHlstDebug\libNt\hlst-buildhtml-foredit\js\main\src\aa 或 H:/Book/debug/TxbookHlstDebug/libNt/hlst-buildhtml-foredit/js/main/src/aa,但实际得到的是 H:\H:\Book\debug\TxbookHlstDebug\libNt\hlst-buildhtml-foredit\js\main\src\aa,出现盘符重复问题。

临时方案的隐患

曾用 path.resolve(__dirname.substring(1), 'aa') 临时解决,但这种方式存在安全隐患——若路径并非以盘符开头,截取第一个字符会破坏原有路径结构。

问题根源

项目使用ESM模块而非CommonJS,直接引用 __dirname 会报错。此前错误通过以下代码获取 __dirname:

const __filename = new URL(import.meta.url).pathname;
const __dirname = path.dirname(__filename);

这种方式得到的路径开头会多一个 /(例如 /H:/Book/...),path.resolve 处理该路径时会将其识别为相对路径,最终导致盘符重复。

正确解决方案

使用Node.js内置的 url.fileURLToPath 方法处理 import.meta.url,正确获取 __filename 和 __dirname:

const __filename = url.fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

通过这种方式获取的路径符合Windows系统规范,调用 path.resolve(__dirname, 'aa') 可得到预期结果,彻底解决盘符重复问题。

内容的提问来源于stack exchange,提问作者Nor.Z

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:03:19