首页 > 解决方案 > 写入文件 fs 模块时出现问题,显然路径位于根级别

问题描述

我正在练习打字稿,我想使用 fs 模块编写一个文件,但我不知道这是一个菜鸟问题还是我做错了什么,但我的项目看起来像这样:

-> dir(这里是 tsc 的 js 结果)

-> 源代码

--> 数据

---> 数据.json

--> 服务

---> 服务.ts

--> 索引.ts

-> 包.json

-> tsconfig.json

在 service.ts 显然路径是: let filePath = path.join('./','src','data','data.json') // this works

fs.writeFile(filePath, JSON.stringify(data,null,2), 'utf8', (err)=>{ if(err){ return console.log(err);}})

所以我不知道为什么路径定位在根级别

如果我尝试“../data/data.json”,我会收到 ENOENT ERROR no such file or directory

可以吗?

标签: javascriptnode.jsjsontypescriptfs

解决方案


具有相对路径的文件系统操作始终使用当前工作目录 - 这里解释了一个概念:https ://en.m.wikipedia.org/wiki/Working_directory

当您运行 Node.js 时,您会在特定目录中执行此操作。例如,脚本npm start通常在存储库/项目的根目录中执行 - 这会导致所有相对路径从那里开始解析。但是请注意,这在生产中可能会有所不同 - Docker、PM2、systemd 或任何其他工具可以在不同的工作目录中运行您的脚本(这通常可以配置)。

要检查 Node.js 中的当前工作目录,请使用https://nodejs.org/api/process.html#processcwd

也可以构建相对于 JS 文件目录的路径。本教程展示了如何做到这一点的各种示例:https ://www.digitalocean.com/community/tutorials/nodejs-how-to-use__dirname

重要的是要记住require()使用相对于 __dirname 的路径,但fs相对于 CWD 进行解析。


推荐阅读