Sync配置详解:自定义目录监控、日志输出与桌面通知全攻略
【免费下载链接】syncOn-the-fly recompiling and reloading in Erlang. Code without friction.项目地址: https://gitcode.com/gh_mirrors/sync/sync
Sync是一款强大的Erlang开发工具,它能够实时监控源代码变化并自动重新编译和重新加载模块,让开发者实现"无摩擦编码"。通过灵活的配置选项,Sync可以完全适应你的开发工作流程,提供个性化的开发体验。本文将详细介绍Sync的完整配置方案,帮助你充分利用这个强大的开发工具。🚀
📋 Sync核心功能概览
Sync的核心功能是自动检测Erlang源代码文件的变化,自动重新编译修改的模块,并重新加载到运行中的Erlang虚拟机中。这意味着你可以在开发过程中保存文件后立即看到代码变更的效果,无需手动执行make或c:l(Module)命令。
Sync的主要特性包括:
- 自动编译:监控
.erl文件变化并自动重新编译 - 自动重载:将编译后的
.beam文件加载到Erlang VM - 桌面通知:支持Growl、Libnotify、Windows Notifu等桌面通知系统
- 灵活的日志控制:可自定义控制台输出级别
- 远程集群支持:支持在Erlang集群中同步代码变更
- 自定义目录监控:可配置特定目录进行监控
🔧 基础安装与启动
使用Rebar3安装
在rebar.config中添加Sync依赖:
{deps, [ sync ]}.启动Erlang shell并自动启动Sync:
rebar3 shell --eval "sync:go()."手动系统级安装
cd $ERL_LIBS git clone https://gitcode.com/gh_mirrors/sync/sync (cd sync; make)然后在Erlang控制台中启动:
sync:go().📁 自定义监控目录配置
Sync默认会监控所有已加载模块的源代码目录,但你也可以自定义监控目录。在Erlang配置文件中添加:
[ {sync, [ {src_dirs, {replace, [{"./priv/plugins", [{outdir,"./priv/plugins_bin"}]}]}} ]} ].配置参数说明:
- strategy:
add或replace,决定是添加目录还是替换默认目录 - src_dir_descr:目录路径和编译选项列表
例如,要同时监控多个目录:
[ {sync, [ {src_dirs, {add, [ {"./src", [{outdir, "./ebin"}]}, {"./test", [{outdir, "./test_ebin"}]}, {"./lib", [{outdir, "./lib_ebin"}]} ]}} ]} ].🎛️ 日志输出配置详解
Sync提供了精细的日志控制功能,你可以决定哪些类型的消息显示在控制台中。
日志配置选项
在配置文件sync.sample.config中,你可以设置:
{log, all}, % 显示所有日志 {log, none}, % 不显示任何日志 {log, [success, warnings, errors]}, % 显示特定类型的日志三种配置方式
- 配置文件方式:
{log, [warnings, errors]}, % 只显示警告和错误- 命令行参数方式:
erl -sync log all erl -sync log none- Erlang Shell动态配置:
sync:log(all); sync:log(none); sync:log([errors, warnings]);日志类型说明
- success:成功编译和重载通知
- warnings:编译警告信息
- errors:编译错误信息
🔔 桌面通知系统配置
Sync支持多种桌面通知系统,让你无需盯着控制台就能了解编译状态。
成功编译通知示例
编译警告通知示例
编译错误通知示例
通知配置选项
配置方式与日志配置类似:
{growl, all}, % 启用所有桌面通知 {growl, none}, % 禁用桌面通知 {growl, [success, warnings, errors]}, % 启用特定通知跨平台通知支持
Sync自动检测操作系统并选择合适的通知工具:
- Mac:Growl或系统通知中心
- Linux:Libnotify (
notify-send) - Windows:Notifu
- Emacs:通过emacsclient发送通知
手动指定通知工具
如果自动检测失败,可以手动指定:
{executable, 'notify-send'}, % Linux使用Libnotify {executable, growlnotify}, % Mac使用Growl {executable, notifu}, % Windows使用Notifu {executable, emacsclient}, % Emacs通知🎯 模块过滤与排除配置
在大型项目中,你可能只想监控特定模块,或者排除某些模块。
白名单配置
只监控指定的模块:
{whitelisted_modules, [my_module, other_module, 'third-module']},黑名单配置
排除特定模块不监控:
{excluded_modules, [dont_watch_this, ignore_me_too]},路径排除配置
使用正则表达式排除特定路径:
{excluded_paths, [ "^.*/deps/.*$", % 排除deps目录 "^.*/_build/.*$", % 排除_build目录 "^.*/\.git/.*$" % 排除.git目录 ]},🔄 同步方法与扫描策略
Sync支持两种文件变更检测方法:
扫描器模式(默认)
{sync_method, scanner},定期扫描文件系统检查文件修改时间,CPU占用约1-2%。
文件系统事件模式
{sync_method, fsevents},订阅文件系统事件,只在文件实际变更时触发重新编译。
🌐 远程集群代码同步
Sync支持在Erlang集群中同步代码变更,这对于分布式开发特别有用。
启用远程补丁功能
- 连接到集群中的任意节点:
net_adm:ping('othernode@host').- 启用补丁模式:
sync:patch().- 开始编辑代码,Sync会自动将变更同步到所有连接的节点。
🎣 同步后钩子配置
Sync允许你注册回调函数,在模块重新编译和重载后执行自定义操作。
基本钩子示例
sync:onsync(fun(Mods) -> io:format("重新加载的模块: ~p~n", [Mods]) end).自动测试钩子
Sync提供了内置的自动测试功能:
sync:enable_autotest().这会自动运行每个重新加载模块的test/0函数(如果存在)。
自定义测试钩子
RunTests = fun(Mods) -> [Mod:test() || Mod <- Mods, erlang:function_exported(Mod, test, 0)] end, sync:onsync(RunTests).📊 路径处理策略
当应用程序位置移动时,Sync可以智能处理源代码路径。
非后代路径处理
{non_descendants, fix}, % 尝试在当前目录下查找源文件 {non_descendants, allow}, % 使用原始路径,不进行修复 {non_descendants, ignore}, % 完全忽略非后代路径的文件🛠️ 实用命令参考
启动与停止
sync:go(). % 启动Sync sync:pause(). % 暂停扫描 sync:stop(). % 停止Sync应用状态查询
sync:info(). % 查看Sync状态信息 sync:growl(). % 查看当前通知设置 sync:log(). % 查看当前日志设置动态配置
sync:growl([warnings, errors]). % 只显示警告和错误通知 sync:log(none). % 禁用所有日志输出 sync:clear_onsync(). % 清除同步后钩子📝 完整配置示例
以下是一个完整的Sync配置文件示例,展示了所有可用选项:
[ {sync, [ {sync_method, scanner}, {growl, [warnings, errors]}, {log, all}, {non_descendants, fix}, {whitelisted_modules, []}, {excluded_modules, [debug_module, test_helper]}, {excluded_paths, ["^.*/deps/.*$", "^.*/_build/.*$"]}, {executable, auto}, {src_dirs, {add, [ {"./src", [{outdir, "./ebin"}]}, {"./lib", [{outdir, "./lib_ebin"}]} ]}} ]} ].💡 最佳实践建议
开发环境专用:Sync仅用于开发环境,不要在生产环境中使用。
合理配置通知:根据个人偏好配置桌面通知,避免过多干扰。
使用模块过滤:在大型项目中使用白名单或黑名单提高性能。
定期检查状态:使用
sync:info()查看Sync的工作状态。利用同步后钩子:配置自动测试或其他自定义操作提高开发效率。
集群开发:在分布式开发环境中使用
sync:patch()功能同步代码变更。
通过合理配置Sync,你可以创建完全符合个人工作流程的开发环境,享受"无摩擦编码"的极致体验。Sync的灵活性让它成为Erlang开发者的必备工具,无论是个人项目还是团队协作,都能显著提高开发效率。✨
记住,Sync的核心目标是让你专注于编写代码,而不是管理编译和重载过程。通过本文介绍的配置选项,你可以让Sync更好地为你服务,创造更加流畅的开发体验。
【免费下载链接】syncOn-the-fly recompiling and reloading in Erlang. Code without friction.项目地址: https://gitcode.com/gh_mirrors/sync/sync
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考