颤振运行如何工作?

时间:2019-03-04 01:29:15

标签: emacs process flutter signals hot-reload

  

信息:我是一个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进程的“屏幕”上?

1 个答案:

答案 0 :(得分:0)

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

您还可以调查源代码并创建自定义实现。
该功能由Dart天文台提供,该服务内置于VM中,您可以连接该虚拟机,并可以通过命令对其进行控制。

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