Node.js中path.join忽略rootDir最后目录的问题求助
问题原因与解决方案
问题根源
你在path.js中错误使用了path.dirname(require.main.path):
require.main.path已经返回了项目根目录C:\Users\HP\Desktop\Nodejs\sec-5path.dirname()的作用是获取传入路径的父目录,执行后rootDir变成了C:\Users\HP\Desktop\Nodejs,因此拼接路径时丢失了sec-5目录
修复方案
方案1:直接导出require.main.path
修改path.js代码,去掉多余的path.dirname():
const path = require("path"); console.log("path.js : 2", require.main.path); module.exports = require.main.path; // 直接导出根目录路径
方案2:用__dirname构建根目录(更稳定)
如果担心require.main在子进程、模块被作为依赖引入等场景下的不确定性,可以通过当前文件路径反向推导根目录:
const path = require("path"); // path.js在utils目录下,根目录是utils的上上级目录 module.exports = path.resolve(__dirname, "../.."); // 也可以用嵌套dirname:module.exports = path.dirname(path.dirname(__dirname));
验证效果
修改后,rootDir会正确指向C:\Users\HP\Desktop\Nodejs\sec-5,执行path.join(rootDir, "views", "shop.html")将得到预期路径:C:\Users\HP\Desktop\Nodejs\sec-5\views\shop.html
内容的提问来源于stack exchange,提问作者emirhan
相关产品推荐
相关产品推荐

