javascript - 写入文件 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
可以吗?
解决方案
具有相对路径的文件系统操作始终使用当前工作目录 - 这里解释了一个概念: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 进行解析。
推荐阅读
- c++ - 是否使用定义的任意、文字、非零值初始化指针?
- android - 无法为 Firebase 存储上传任务添加 OnSuccessListener
- google-chrome - 堆快照统计解释
- node.js - firestore子集合添加nodejs不起作用
- java - 保存时休眠超时
- python - LibreOffice Calc 上的 Python UNO,重新定位光标
- arrays - MIPS 从数组中读取整数
- javascript - 反应路由和私有路由
- java - 是否可以在编译时自动检测类并为泛型生成类型?
- python - 使用 selenium 发布网页抓取 javascript 网站