node.js - 使用 firebase 模拟器运行 JS 文件时出现问题:exec
问题描述
我正在试用2020 年 5 月 21 日宣布的新Firebase 模拟器 UI 。在Firebase Docs中,我注意到有一个 CLI 命令允许我们运行脚本文件:
firebase emulators:exec scriptpath
在为 firebase.json 中配置的 Firebase 产品
scriptpath
启动模拟器后运行脚本。脚本完成运行后,模拟器进程将自动停止。
虽然文档没有提到它应该是什么类型的脚本文件,但我认为它可能是一个测试脚本或一个可以独立执行且没有任何错误的可用JavaScript 文件。node filename.js
这是有道理的,因为我实际上可以运行一个初始 JS 文件,该文件将一些测试数据预填充到Firestore 模拟器以进行进一步测试。
但是因为我之前已经启动了模拟器,所以我必须打开一个新的命令窗口实例来运行firebase emulators:exec
命令。不幸的是,我遇到了以下错误:
D:\Firebase\my-project>firebase emulators:exec setup-db.js
i emulators: Starting emulators: functions, firestore, database, hosting, pubsub
! hub: emulator hub unable to start on port 4400, starting on 4401 instead.
! emulators: It seems that you are running multiple instances of the emulator suite for project my-project-id. This may result in unexpected behavior.
i emulators: Shutting down emulators.
i hub: Stopping emulator hub
! functions: Port 5001 is not open on localhost, could not start Functions Emulator.
! functions: To select a different host/port, specify that host/port in a firebase.json config file:
{
// ...
"emulators": {
"functions": {
"host": "HOST",
"port": "PORT"
}
}
}
i emulators: Shutting down emulators.
Error: Could not start Functions Emulator, port taken.
注意这一行:
! emulators: It seems that you are running multiple instances of the emulator suite for project my-project-id. This may result in unexpected behavior.
那么,如何在 Firebase Docs 中提到firebase emulators:exec
的模拟器启动之后运行,我可以为上述目的运行 JS 文件吗?提前致谢!
更新:
如果我在firebase emulators:exec setup-imtp-db.js
没有事先运行firebase emulators:start
命令的情况下运行,我会遇到以下错误:
请注意,setup-imtp-db.js
它不包含任何Cloud Functions代码,而只是一个独立的 JS 文件,该文件通过 Admin SDK 将另一个 JSON 文件中的数据填充到 Firestore。我正在使用Node.js 12.14.0
和firebase-tools 8.4.0
。
解决方案
根据Firebase CLI Github README.md:
emulators:exec
启动本地 Firebase 模拟器,运行测试脚本,然后关闭模拟器。
因此,该scriptpath
参数并不是真的要运行一个 JavaScript 文件,该文件会在 Firestore Emulator 上预填充数据(并在其 Emulator UI 上显示),以用于 UI 功能测试或集成测试。执行完测试脚本emulators:exec
后将立即关闭模拟器。
正如@Doug Stevenson在评论中所建议的那样,如果期望模拟器进行适当的错误处理或需要新功能,可以在Github 上为 firebase-tools发布请求或错误报告。
推荐阅读
- c# - Linq to SQL Server Name Changes
- ios - 如何在首次应用启动时添加 iOS 叠加视图?
- serilog - Serilog Selflog 仅将异常数据写入文件一次
- java - 尝试使用连接池和单个连接的资源
- python - 正确启动/停止 Selenium 独立服务器
- python - “pygame.error:ModPlug_Load failed”尝试从字节播放声音时
- nosql - 联邦分布式系统的一致性技术(DB CAP、Simulations 等)
- python - Game Of Life 游戏的简单版本行为不正确
- json - Scala Yield - Liftweb Json for 循环不适用于单个元素
- javascript - React Native Picker 不渲染选项