发布于 2018-07-02 22:11:44
很抱歉使用了插件,但我写了一个非常简单的plugin来处理这个问题。
它利用Flutter的--pid-file命令行标志向其发送SIGUSR1信号。
通过将以下代码添加到autocmd中,您可以获得与我的两行插件相同的结果
silent execute '!kill -SIGUSR1 "$(cat /tmp/flutter.pid)"'并使用--pid-file旗帜启动Flutter。
发布于 2018-12-11 10:48:32
我用SIGUSR1做了一个基于killing的vim插件hankchiutw/flutter-reload.vim。
你不需要在这个插件中使用--pid-file标志。(感谢pgrep:)
只需执行flutter run,修改您的*.dart文件,然后查看重新加载。
发布于 2018-12-02 11:08:20
我是用一个叫做entr的优秀的小工具做到的。在OS/X上,您可以从brew:brew install entr安装它。
然后,按照@nobody_nowhere的建议,使用pidfile启动flutter run。
如何运行entr取决于服务级别。在最简单的情况下,您只需执行find lib/ -name '*.dart' | entr -p kill -USR1 $(cat /tmp/flutter.pid)
但是这样的调用不会在源代码树中检测到新文件(因为find构建了一个文件列表,一开始只监视一次)。你可以使用稍微复杂一点的一行代码:
while true
do
find lib/ -name '*.dart' | \
entr -d -p kill -USR1 $(cat /tmp/flutter.pid)
done-d选项使entr在其中一个目录中检测到新文件并且循环再次运行时退出。
我使用Redux,对中间件或其他状态文件的更改在热重新加载时不起作用,它不会获取这些更改。
#!/bin/bash
set -euo pipefail
PIDFILE="/tmp/flutter.pid"
if [[ "${1-}" != "" && -e $PIDFILE ]]; then
if [[ "$1" =~ \/state\/ ]]; then
kill -USR2 $(cat $PIDFILE)
else
kill -USR1 $(cat $PIDFILE)
fi
fi它检查修改后的文件是否位于/state子目录中,如果为真,则执行热重新启动或热重新加载。我这样调用脚本:
while true
do
find lib/ -name '*.dart' | entr -d -p ./hotreloader.sh /_
done/_参数使entr将文件的名称传递给被调用的程序。
https://stackoverflow.com/questions/49340508
复制相似问题