首页 > 解决方案 > 使用 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.0firebase-tools 8.4.0

标签: node.jsfirebasegoogle-cloud-firestorefirebase-tools

解决方案


根据Firebase CLI Github README.md

emulators:exec启动本地 Firebase 模拟器,运行测试脚本,然后关闭模拟器。

因此,该scriptpath参数并不是真的要运行一个 JavaScript 文件,该文件会在 Firestore Emulator 上预填充数据(并在其 Emulator UI 上显示),以用于 UI 功能测试或集成测试。执行完测试脚本emulators:exec后将立即关闭模拟器。

正如@Doug Stevenson在评论中所建议的那样,如果期望模拟器进行适当的错误处理或需要新功能,可以在Github 上为 firebase-tools发布请求或错误报告。


推荐阅读