如何关闭本地 firebase 模拟器?

use*_*414 21 firebase firebase-tools google-cloud-firestore

目前,我使用以下命令初始化 Firebase 模拟器:

$ firebase emulators:start

经过一段时间的工作,我想停止它。我怎样才能停止模拟器?

xmk*_*hen 38

  1. 查看哪个进程占用了端口 sudo lsof -i tcp:<port>
  2. 杀死进程 kill -9 <process id>

  • 我很惊讶没有关闭命令......这是一个疯狂的工作流程。 (15认同)
  • 我发现如果你退出 VSCode 而不先关闭模拟器,它可以保持运行,并且如果没有上述命令,你将需要重新启动计算机才能重新启动模拟器。感谢您分享@xmkevinchen (5认同)
  • 这似乎是一个明显的功能,可以包含在“firebase emulators:stop”或类似命令中,这让我觉得我使用了错误的工具。启动模拟器并让它们在后台运行并同时进行长时间开发是正常的工作流程吗? (4认同)
  • 对于 Windows:/sf/answers/2774339991/ (3认同)

Ala*_*ine 25

如果你想杀死所有 firebase 模拟器,你可以通过触发此命令轻松做到这一点

$ lsof -t -i:8080 -i:9000 -i:9099 -i:9199 -i:9090 | xargs kill -9
Run Code Online (Sandbox Code Playgroud)

如果您不想每次都输入这么长的命令,我建议您使用package.json文件中的脚本

 "scripts": {
   "emulators:start": "firebase emulators:start",
   "emulators:stop": "lsof -t -i:5001 -i:5002 -i:8080 -i:9000 -i:9099 -i:9199 -i:9090 | xargs kill -9"
  }
Run Code Online (Sandbox Code Playgroud)

一种用于启动模拟器,另一种用于停止,以防 Ctr+C 没有停止后台进程。

这些是 firebase 文档页面中的默认端口。您还应该检查firebase.json文件并替换上一个命令中的 PORTS(如果它们不同)。


Mat*_*uya 9

如果您不想每次都检查端口,则可以使用以下命令停止命令

kill -9 (lsof -t -i:5002 -i:5001)
Run Code Online (Sandbox Code Playgroud)

(-i:xxxx 是您在 firebase.json 中运行的模拟器端口。)

而且,我不想记住这么长的命令。所以我在下面制作了 package.json 脚本。

"scripts": {
   ...
   "stop": "lsof -t -i :5001 -i:5002 | xargs kill -9",
   ...
}
Run Code Online (Sandbox Code Playgroud)

  • 没有什么比一点自动化更能简化您的一天了。 (4认同)

小智 8

根据这个:https : //github.com/firebase/firebase-tools/issues/1367Ctrl+C杀死模拟器

  • 没有。不适用于 MacBook。 (4认同)
  • 在 Windows 中也不会使用 Ctrl+C 杀死 java 控制台 (2认同)

Jer*_*yal 7

一种跨平台解决方案是运行: npx kill-port 4000,8080,8085

  • 命令应该是:“npx Kill-port 4000 8080 8085”。端口号之间用空格代替逗号。 (3认同)
  • 更快的选项,可在 Windows 和 Linux 中工作 (2认同)

Fau*_*lty 6

这是我刚刚发现的一些乐趣。当您想要关闭模拟器并清除所有端口和进程时,在运行模拟器的终端中双击 CTRL-C(按住 CTRL 并双击 C)。

我检查了几次,看看端口是否空闲,它们都是。

只需使用一次 CTRL-C 即可让所有这些端口仍在使用中。希望它能解决其他人的问题,而不仅仅是我。

编辑:现在看来,问题只会持续到设置模拟器后首次关闭计算机为止。现在,我可以使用单个 CTRL-C 正确关闭模拟器。


ppi*_*com 5

我已经尝试了上面的所有答案,但没有一个达到了我的预期:优雅地结束整个模拟器套件,而无需按 ctrl+c,不留下任何端口被占用。这是我解决问题的方法。

总而言之:lsof -ti :4400 | xargs --no-run-if-empty kill

端口为 4400,因为它是模拟器集线器的默认端口。尽管使用此命令,无论您终止哪个进程,您都会结束模拟器。

其他答案中使用的“-9”标志不会向进程发送 SIGTERM 信号,而是强制终止它。这会阻止模拟器正常结束。


Fan*_*Bao 5

另一种方法是使用firebase emulators:exec,根据 CLI 文档,它可以执行以下操作:

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

由于我将测试运行命令放在 Makefile 中,因此我使用以下命令从 Python SDK 测试 firestore firebase_admin

firebase emulators:exec "make test" --only firestore
Run Code Online (Sandbox Code Playgroud)

端口的设置和拆卸由 firebase 直接处理。