Sync配置详解:自定义目录监控、日志输出与桌面通知全攻略
Sync配置详解自定义目录监控、日志输出与桌面通知全攻略【免费下载链接】syncOn-the-fly recompiling and reloading in Erlang. Code without friction.项目地址: https://gitcode.com/gh_mirrors/sync/syncSync是一款强大的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并自动启动Syncrebar3 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}]}]}} ]} ].配置参数说明strategyadd或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 noneErlang Shell动态配置sync:log(all); sync:log(none); sync:log([errors, warnings]);日志类型说明success成功编译和重载通知warnings编译警告信息errors编译错误信息 桌面通知系统配置Sync支持多种桌面通知系统让你无需盯着控制台就能了解编译状态。成功编译通知示例编译警告通知示例编译错误通知示例通知配置选项配置方式与日志配置类似{growl, all}, % 启用所有桌面通知 {growl, none}, % 禁用桌面通知 {growl, [success, warnings, errors]}, % 启用特定通知跨平台通知支持Sync自动检测操作系统并选择合适的通知工具MacGrowl或系统通知中心LinuxLibnotify (notify-send)WindowsNotifuEmacs通过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(othernodehost).启用补丁模式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),仅供参考