保存时热重载

问题描述 投票:0回答:6

我目前在 OSX 上使用终端和 vim 作为 Flutter 的开发环境。一切进展顺利,只是当我保存任何 dart 文件时应用程序不会重新加载。有没有办法触发该行为?目前我必须转到终端并按“r”才能查看我的更改。

macos vim flutter hot-reload
6个回答
6
投票

对不起这个插件,但我写了一个非常简单的插件来处理这个问题。

它利用 Flutter 的

--pid-file
命令行标志向其发送
SIGUSR1
信号。

通过将其添加到

autocmd

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

并使用

--pid-file
标志启动 Flutter。


2
投票

我制作了一个vim插件hankchiutw/flutter-reload.vim,基于用

SIGUSR1
进行杀戮。

您不必在此插件中使用

--pid-file
标志。 (感谢
pgrep
:))

只需执行

flutter run
,修改您的 *.dart 文件并查看重新加载。


1
投票

我用一个名为

entr
的优秀小工具做到了。在 OS/X 上,您可以从
brew
:
brew 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
将文件名传递给正在调用的程序。


0
投票

如果您使用 lsp-mode 和 lsp-dart - 您可以附加一个保存钩子,该钩子在正在运行的 flutter 调试服务实例上执行热重载。

(use-package lsp-mode)
(add-hook 'dart-mode-hook #'lsp-deferred)

(defun lsp-dart-install-save-hooks ()
  (add-hook 'after-save-hook #'flutter-hot-reload t t))

(add-hook 'dart-mode-hook #'lsp-dart-install-save-hooks)

实例需要运行才能使其工作。 要启动实例,请使用

flutter-run <RET>
flutter-run-device <RET> [select device] <RET>


-1
投票

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


-2
投票

vscode 有这个功能。如果你不介意转向 vscode,你可以直接使用它。您还可以联系作者,看看他们是否对如何在 vim 中执行此操作有任何建议,或者直接检查源代码。 vim 很可能有一个机制来做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.