4

INFO:我是一名 Emacs 用户,曾使用 react-native 开发移动应用程序。

描述

最近在尝试开发一个flutter app,卡住了hot-reload部分,希望flutter能在我修改的时候自动重新加载lib/*dart

我正在考虑的是观察lib/*dart' 的修改,当它发生时,将 ar自动传递给颤振过程。

我怎样才能达到这个flutter run过程?

解决方案

Emacs 解决方案

在一遍又一遍地阅读Hot reload on save之后,我更新了 Emacs 的配置文件:

(require 'dart-mode)
(defun auto-reload ()
  (shell-command "kill -s SIGUSR1 $(cat /tmp/flutter.pid) && echo 'reload flutter...'"))

(add-hook 'dart-mode-hook
          (lambda ()
            (add-hook 'after-save-hook 'auto-reload nil 'make-it-local)))

这很简单,我简直不敢相信……杀死flutter run进程,它会在通过我们的 shell 脚本kill -SIGUSR1向进程发送信号后自动重新加载。flutter run

谢谢@pskink,我已经把我的大脑再试了一次,然后,问题已经解决了。

我再次检查了描述,命令描述为:linux signalkill

向指定进程、指定进程组的所有成员或系统上的所有进程发送信号。

不仅仅是粗鲁地杀死进程......这是kill命令行中的描述:

kill [-s sigspec | -n signum | -sigspec] pid | jobspec
...or
kill -l [sigspec]

然而,flutter--pid-file的flag是这样描述的:

指定要写入进程 ID 的文件。您可以发送 SIGUSR1 来触发热重载,发送 SIGUSR2 来触发热重启。

我们kill -SIGUSR1 $(cat /tmp/flutter.pid),当我们向 发送信号SIGURS1flutter process,就发生了这样的事情。

我仍然想知道,我们是否可以将一个发送r到流程的“屏幕” flutter run

4

1 回答 1

1

https://pub.dartlang.org/packages/angel_hothttps://pub.dartlang.org/packages/jaguar_hotreload是为服务器端开发提供热重载支持的包 - 在文件更改时热重载。
我希望这也适用于 Flutter。

您还可以调查源并创建自定义实现。
该功能由 Dart observatory 提供,这是一种内置于 VM 中的服务,您可以连接到该服务并可以通过命令进行控制。

另请参阅https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md

于 2019-03-04T06:33:53.193 回答