保存时热重新加载

时间:2018-03-17 18:35:58

标签: macos vim flutter hot-reload

我目前在OSX上使用终端和vim作为Flutter的开发环境。事情进展顺利,但是当我保存任何飞镖文件时应用程序不会重新加载。有没有办法触发这种行为?目前我必须去终端并点击" r"看到我的变化。

6 个答案:

答案 0 :(得分:6)

很抱歉,但是我写了一个非常简单的plugin来处理这个问题。

它利用Flutter的--pid-file命令行标志向其发送SIGUSR1信号。

通过将其添加到autocmd

,可以获得与我的两行插件相同的结果
silent execute '!kill -SIGUSR1 "$(cat /tmp/flutter.pid)"'

然后使用--pid-file标志启动Flutter。

答案 1 :(得分:2)

我用SIGUSR1杀死了一个vim插件hankchiutw/flutter-reload.vim

此插件无需使用--pid-file标志。 (感谢pgrep:))

只需执行flutter run,修改* .dart文件并查看重新加载。

答案 2 :(得分:1)

我使用了出色的小工具entr来做到这一点。在OS / X上,您可以从brewbrew install entr安装它。该工具的主页位于http://eradman.com/entrproject/

然后按照@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并更改为中间件或其他状态文件,无法与热重载一起使用,它也无法接收这些更改。因此,您需要诉诸热重启。 我有一个脚本hotrestarter.sh

#!/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子目录中,并且是否热启动或热重新加载为true。我这样称呼脚本:

while true
do
    find lib/ -name '*.dart' | entr -d -p ./hotreloader.sh /_
done

/_参数使entr将文件名传递给正在调用的程序。

答案 3 :(得分:0)

你不会说什么平台,但所有平台都有一个观察者"可以在树中的任何文件发生更改时运行命令的应用程序。你需要运行其中一个。

答案 4 :(得分:0)

以下内容将在每次写入*.dart文件(添加到.vimrc)中触发Flutter重新加载:

function! HotReload() abort
  if !empty(glob("/tmp/flutter.pid"))
    silent execute '!kill -SIGUSR1 "$(cat /tmp/flutter.pid)"'
  endif
endfunction
autocmd BufWritePost *.dart call HotReload()

如果您还在NeoVim中使用:terminal,则可以直接在NeoVim中创建一个自定义命令来运行带有--pid-file标志的Flutter。像这样:

command! FlutterRun :8split +terminal flutter run --pid-file /tmp/flutter.pid

这将创建一个:FlutterRun命令,该命令将在拆分中打开一个新的终端实例并自动运行Flutter(带有热重载)。

答案 5 :(得分:-1)

vscode具有此功能。如果你不介意转移到vscode,你可以开箱即用。您也可以联系作者,看看他们是否有任何关于如何在vim中执行此操作或直接检查源的建议。很可能vim会有这样做的机制。