多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

如何用 .asdfrc 的插件钩子在 asdf 插件安装、更新前后执行自定义脚本

如何用 .asdfrc 的插件钩子在 asdf 插件安装、更新前后执行自定义脚本 如何用 .asdfrc 的插件钩子在 asdf 插件安装、更新前后执行自定义脚本【免费下载链接】asdfExtendable version manager with support for Ruby, Node.js, Elixir, Erlang more项目地址: https://gitcode.com/GitHub_Trending/as/asdf如果你的多个项目里都在用 asdf 管理语言版本你很可能需要在asdf plugin add添加插件、asdf plugin update更新插件的前后做一些自己的事情记录日志、同步配置、触发通知等。asdf 支持在机器级配置文件.asdfrc里定义插件钩子Plugin Hooks在插件安装add、reshim、更新update、卸载remove前后执行自定义代码见 配置文档。本文以 add 和 update 为主路径说明钩子如何配置、何时触发、以及如何通过命令输出确认钩子确实执行了。钩子的配置位置与命名规则.asdfrc是 asdf 的用户机器级配置文件默认位置是${HOME}/.asdfrc。如果 asdf 安装在别处可以用环境变量ASDF_CONFIG_FILE指向任意位置必须是绝对路径且应在 sourceasdf.sh/asdf.fish等脚本之前设置。钩子在.asdfrc中按钩子名 shell 表达式的形式定义。文档给出的示例pre_foo_bar echo Executing with args: $支持的模式如下摘自 configuration.md 的 Plugin Hooks 一节模式触发时机{pre,post}_asdf_plugin_{add,update,remove,reshim}通用钩子对任意插件的对应操作生效$1为插件名{pre,post}_asdf_plugin_{add,update,remove}_plugin_name只针对某个具体插件名生效{pre,post}_asdf_{install,reshim,uninstall}_plugin_name工具版本安装/reshim/卸载前后$1为完整版本号pre_asdf_download_plugin_name下载插件对应工具源码前本文聚焦第一、二种模式插件 add/update 前后。第三、四种是同一机制作用于版本安装流程的钩子本文不展开。在 .asdfrc 中配置 add / update 钩子最短主路径是写通用钩子。在${HOME}/.asdfrc中追加以下内容来自 test/plugin_add_command.bats 中的真实测试配置pre_asdf_plugin_add echo ADD ${} post_asdf_plugin_add echo ADD done ${} pre_asdf_plugin_update echo UPDATE ${} post_asdf_plugin_update echo UPDATE done ${}每行一个钩子$/${}会把参数原样打印出来方便确认钩子拿到了什么通用钩子的$1是插件名。钩子值是任意 shell 表达式asdf 会执行它输出直接进入 asdf 命令的 stdout/stderr。asdf 内部的 testdata/asdfrc 展示了更复杂的写法如eval $按需使用。可选分支只针对某个插件生效的钩子。以插件名dummy为例pre_asdf_plugin_add_dummy echo ADD post_asdf_plugin_update_dummy echo UPDATE done从 internal/plugins/plugins.go 的实现可以看出执行顺序以 add 为例asdf 先依次执行pre_asdf_plugin_add传插件名和pre_asdf_plugin_add_plugin_name不传参数完成插件克隆后再依次执行两个post钩子update 流程asdf plugin update tool [git-ref]同样在执行前、执行后各触发一次通用与具体钩子。因此同一次操作中通用钩子和具体钩子都会运行而不是二选一。执行并验证钩子是否生效编辑${HOME}/.asdfrc按上一节写入钩子。添加一个插件。文档推荐的插件安装方式是通过直接 URL 添加见 create.mdasdf plugin add name git-url # 例如 asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs检查命令输出中钩子的打印位置。以下是 test/plugin_add_command.bats 中测试断言的输出文档测试示例非固定预期配置pre_asdf_plugin_add echo ADD ${}后asdf plugin add dummy url的输出为ADD dummy plugin add path${ASDF_DIR}/plugins/dummy source_url${BASE_DIR}/repo-dummy即 pre 钩子打印在插件 add 的输出之前且$1dummy被正确传入。配置post_asdf_plugin_add echo ADD ${}后钩子打印出现在plugin add path...一行之后。配置pre_asdf_plugin_add_dummy echo ADD后输出中只有ADD具体钩子不接收参数出现在plugin add输出之前。更新插件时同理执行asdf plugin update tool [git-ref]确认pre/post_asdf_plugin_update的打印出现在更新操作输出之前/之后。判断标准很简单钩子表达式打印的内容出现在 asdf 命令输出里且位置前/后与 pre/post 对应说明钩子按预期触发。asdf 的测试套件正是用这种方式断言的。限制与边界.asdfrc是机器级配置不可共享。它存的是本机自定义团队协作共享的版本约定应写在.tool-versions里需要多用户统一钩子时可用ASDF_CONFIG_FILE把配置文件指到受管理的绝对路径。未定义的钩子不会报错。执行一个.asdfrc中不存在的钩子名时asdf 直接跳过internal/hook/hook_test.go 中有对应的测试用例所以给通用钩子改名或删除某行不会导致 add/update 失败。具体钩子不支持 reshim。模式表中plugin_name变体只覆盖 add、update、removereshim 只有通用钩子pre/post_asdf_plugin_reshim。区分用户钩子与插件自带脚本。插件仓库自身也可以提供bin/post-plugin-add、bin/post-plugin-update、bin/pre-plugin-remove等回调脚本见 docs/plugins/create.md它们由插件作者编写、随插件分发而本文的.asdfrc钩子由用户在自己机器上定义。两者是不同机制不要混用。完成配置后你可以在每次插件添加、更新前后自动执行任意 shell 逻辑如果之后还想在工具版本安装/卸载前后而不是插件层面执行自定义逻辑可以使用{pre,post}_asdf_{install,uninstall}_plugin_name钩子$1会收到完整的版本号。【免费下载链接】asdfExtendable version manager with support for Ruby, Node.js, Elixir, Erlang more项目地址: https://gitcode.com/GitHub_Trending/as/asdf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表