信息:我是一个Emacs用户,习惯于使用react-native开发移动应用。
最近,我正在尝试开发一个受hot-reload
约束的flutter应用程序,希望对lib/*dart
进行更改时可以自动重新加载flutter。
我正在考虑的是观察lib/*dart
的修改,它会自动将r
传递给颤动过程。
如何进行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 signal
的{{3}},kill
命令描述为:
向指定的进程,指定的进程组的所有成员或系统上的所有进程发送信号。
不仅仅是粗鲁地杀死进程……这是命令行中kill
的描述:
kill [-s sigspec | -n signum | -sigspec] pid | jobspec
...or
kill -l [sigspec]
但是, flutter 的标志--pid-file
的描述如下:
指定要写入进程ID的文件。您可以发送SIGUSR1触发热重载,发送SIGUSR2触发热重启动。
我们kill -SIGUSR1 $(cat /tmp/flutter.pid)
向SIGURS1
发送信号flutter process
时,就是这样。
我还在想,是否可以将r
发送到flutter run
进程的“屏幕”上?
答案 0 :(得分:0)
https://pub.dartlang.org/packages/angel_hot和https://pub.dartlang.org/packages/jaguar_hotreload是用于热重支持服务器端开发的程序包-用于在文件更改时热重装载。
我希望这对Flutter也适用。
您还可以调查源代码并创建自定义实现。
该功能由Dart天文台提供,该服务内置于VM中,您可以连接该虚拟机,并可以通过命令对其进行控制。
另请参阅https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md