Firebase Functions出现EROFS只读错误无法写入metadata.json如何解决
报错原因
EROFS: read-only file system 报错是由Firebase Functions运行环境的文件系统特性导致的:函数部署后所有打包上传的代码/文件所在目录均为只读状态,仅/tmp临时目录开放写入权限。你直接修改部署包内的metadata.json,触发了只读系统限制。
可行解决方案
方案1:临时读写(不需要持久化存储数据)
如果修改后的metadata.json只需要在当前函数调用周期/实例存活周期内使用,不需要跨调用保留数据,把操作路径切换到/tmp目录即可:
- 先将部署包内的原始
metadata.json复制到/tmp目录 - 后续所有读写操作均指向
/tmp下的文件
示例代码:
const fs = require('fs'); const path = require('path'); // 原始部署文件路径 const originMetadataPath = path.join(__dirname, 'metadata.json'); // 临时目录可写路径 const writableMetadataPath = path.join('/tmp', 'metadata.json'); // 复制原始文件到可写目录 fs.copyFileSync(originMetadataPath, writableMetadataPath); // 执行写入操作 fs.writeFileSync(writableMetadataPath, JSON.stringify({yourKey: 'yourValue'}));
注意:/tmp目录的存储上限为512MB,且实例销毁后所有数据会被清空,仅适合临时缓存场景。
方案2:持久化存储(需要跨函数调用保留修改后的数据)
如果修改后的metadata.json需要长期保留,不要使用本地文件存储,切换到Firebase配套的存储服务即可:
- 结构化数据直接存入Cloud Firestore或Realtime Database,直接通过数据库API读写json结构内容,无需操作本地文件
- 必须保留文件格式的话,将文件上传到Cloud Storage for Firebase,需要使用时再下载到
/tmp目录操作
内容的提问来源于stack exchange,提问作者Paresh Nandaniya
相关产品推荐
相关产品推荐

