首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >保存时热重新加载

保存时热重新加载
EN

Stack Overflow用户
提问于 2018-03-18 02:35:58
回答 5查看 2.7K关注 0票数 3

EN

回答 5

Stack Overflow用户

发布于 2018-07-02 22:11:44

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

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

通过将以下代码添加到autocmd中,您可以获得与我的两行插件相同的结果

代码语言:javascript
运行
复制
silent execute '!kill -SIGUSR1 "$(cat /tmp/flutter.pid)"'

并使用--pid-file旗帜启动Flutter。

票数 6
EN

Stack Overflow用户

发布于 2018-12-11 10:48:32

我用SIGUSR1做了一个基于killing的vim插件hankchiutw/flutter-reload.vim

你不需要在这个插件中使用--pid-file标志。(感谢pgrep:)

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

票数 2
EN

Stack Overflow用户

发布于 2018-12-02 11:08:20

我是用一个叫做entr的优秀的小工具做到的。在OS/X上,您可以从brewbrew install entr安装它。

然后,按照@nobody_nowhere的建议,使用pidfile启动flutter run

如何运行entr取决于服务级别。在最简单的情况下,您只需执行find lib/ -name '*.dart' | entr -p kill -USR1 $(cat /tmp/flutter.pid)

但是这样的调用不会在源代码树中检测到新文件(因为find构建了一个文件列表,一开始只监视一次)。你可以使用稍微复杂一点的一行代码:

代码语言:javascript
运行
复制
while true
do
    find lib/ -name '*.dart' | \
        entr -d -p kill -USR1 $(cat /tmp/flutter.pid)
done

-d选项使entr在其中一个目录中检测到新文件并且循环再次运行时退出。

我使用Redux,对中间件或其他状态文件的更改在热重新加载时不起作用,它不会获取这些更改。

代码语言:javascript
运行
复制
#!/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子目录中,如果为真,则执行热重新启动或热重新加载。我这样调用脚本:

代码语言:javascript
运行
复制
while true
do
    find lib/ -name '*.dart' | entr -d -p ./hotreloader.sh /_
done

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49340508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档