ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

mise tasks add:命令行创建 TOML 与文件任务的双模式机制全解析

mise tasks add:命令行创建 TOML 与文件任务的双模式机制全解析 mise tasks add命令行创建 TOML 与文件任务的双模式机制全解析【免费下载链接】misedev tools, env vars, task runner项目地址: https://gitcode.com/GitHub_Trending/mi/misemise tasks add是 mise 任务系统task runner的脚手架命令用于在当前项目的mise.toml中程序化地新增一个任务定义或以-f标志创建一个独立的 shell 脚本任务文件。本文以官方 CLI 参考文档 docs/cli/tasks/add.md 为主体逐条解析其参数语义、两种写入模式的实际生成产物并结合 src/cli/tasks/add.rs 的实现与 e2e/tasks/test_task_add 端到端测试说明每个标志在最终配置中的落点帮助你在 CI、dotfiles 或自动化脚本中批量生成符合规范的任务定义。命令签名与使用前提命令的完整用法为mise tasks add [FLAGS] TASK [-- RUN]…TASK是必填的任务名将被用作[tasks.TASK]表名或脚本文件名RUN是要执行的命令必须放在--之后且可以携带多个词在 src/cli/tasks/add.rs 中通过#[usage(double_dash required)]声明即 RUN 参数必须以--分隔传入该命令会修改状态它会把任务写进本地配置文件或项目目录属于写入型操作。官方参考文档给出的最小示例mise tasks add pre-commit --depends test --depends render -- echo pre-commit写入位置的确定规则“target file for write operations”由 mise 的配置解析逻辑决定TOML 模式写入本地mise.toml由 src/config/mod.rs 中的local_toml_config_path计算文件模式则写入项目任务目录见下文Task::task_dir()一节。完整参数一览以下标志继承自官方参考文档并对照 src/cli/tasks/add.rs 中的usage_rs派生结构体逐项确认每个标志都真实映射到源码字段标志源码字段作用-a, --alias ALIASalias: VecString为任务添加别名可重复传入多个-d, --depends DEPENDSdepends: VecString声明前置依赖任务可重复-D, --dir DIRdir: OptionString让任务在指定目录中运行注意短选项是D而非d-f, --filefile: bool创建文件任务shell 脚本而非 TOML 任务-H, --hidehide: bool让任务在mise tasks列表和 shell 补全中隐藏-q, --quietquiet: bool运行时不打印将要执行的命令本身-r, --rawraw: bool直接连接 stdin/stdout/stderr不经过输出捕获-s, --sources SOURCESsources: VecString声明任务使用的输入文件 glob参与缓存的输入指纹-w, --wait-for WAIT_FORwait_for: VecString若这些任务也在运行等待它们先结束用于避免并发冲突--depends-post DEPENDS_POSTdepends_post: VecString任务结束后运行的后置依赖--description DESCRIPTIONdescription: OptionString任务描述会显示在任务列表中--outputs OUTPUTSoutputs: VecString任务产出的文件 glob产物为最新时任务会被跳过增量构建--run-windows RUN_WINDOWSrun_windows: OptionString在 Windows 上运行的替代命令--shell SHELLshell: OptionString指定运行任务的 shell文件任务模式下还决定 shebang--silentsilent: bool既不打印命令也不打印其输出-h, --help—打印帮助值得注意的是源码中还保留着两段被注释掉的env与tools标志src/cli/tasks/add.rs 中的 TODO说明这两个参数是计划中的能力当前版本尚未开放——编写自动化脚本时不要假设它们可用。TOML 模式默认向 mise.toml 写入任务表不传-f时命令将任务定义追加到本地mise.toml的[tasks]段。以文档示例为例执行后mise.toml中新增e2e 测试 e2e/tasks/test_task_add 断言了该精确产物[tasks.pre-commit] depends [test, render] run echo pre-commit从源码实现看TOML 模式的关键流程src/cli/tasks/add.rs为读取现有文件通过config::local_toml_config_path()拿到本地配置文件路径用toml_edit::DocumentMut解析。toml_edit是保格式format-preserving的 TOML 库因此不会打乱你已有配置的注释与排版惰性建表doc.entry(tasks).or_insert_with(...)只在[tasks]段不存在时才创建标记为 implicit不输出表头存在则直接复用按需插入键depends、depends_post、wait_for、alias、sources、outputs等数组字段只有非空时才写入description、dir、shell、run_windows等单值字段同理hide、raw、quiet、silent布尔标志为真时写入 true命令词安全拼接run字段使用shell_words::join(self.run)对多个词进行 shell 引号转义后再写入避免含空格/特殊字符的命令被破坏信任配置写入完成后调用config_file::trust(config_file::config_trust_root(path))src/cli/tasks/add.rs把该配置文件所在目录标记为受信这样新写入的任务可以被直接执行而不触发信任提示。多平台任务的写法在 e2e 测试中同样有断言e2e/tasks/test_task_addmise tasks add os --run-windows echo windows -- echo unix生成[tasks.os] run echo unix run_windows echo windows任务字段本身的完整语义depends、sources/outputs如何参与缓存判断等参见 TOML 任务参考。文件任务模式-f/--file生成带 #MISE 元数据的脚本传入-f时命令不碰mise.toml而是在项目任务目录中创建一个可执行脚本并用#MISE注释行承载所有元数据。测试用例e2e/tasks/test_task_add给出的完整命令与产物mise tasks add --file pre-commit --depends test --depends render -- echo pre-commit#!/usr/bin/env bash #MISE depends[test, render] set -euxo pipefail echo pre-commit从 src/cli/tasks/add.rs 的实现可以读出文件任务模板的生成规则脚本路径以Task::task_dir()返回的目录为根任务名中的:被替换为路径分隔符path Task::task_dir().join(self.task.replace(:, MAIN_SEPARATOR_STR))因此嵌套任务名如group:build会落为mise-tasks/group/build若该路径已是一个目录则在其下创建_default脚本src/cli/tasks/add.rsshebang默认#!/usr/bin/env bash使用--shell可替换为其他解释器src/cli/tasks/add.rs#MISE元数据行depends、depends_post、wait_for、alias、sources、outputs以key[a, b]数组字面量书写description、dir为keyvaluehide、raw、quiet、silent为keytrue。这些注释行与 TOML 字段一一对应文件任务解析器会读取它们文件任务机制详见 docs/tasks/file-tasks.md严格模式默认开启模板在元数据之后自动插入set -euxo pipefail使命令失败立即退出命令体--之后的 RUN 词以空格连接后追加到脚本末尾落盘create_dir_all递归创建父目录写入后调用make_executable赋予可执行权限src/cli/tasks/add.rs。任务目录从哪里来Task::task_dir()src/task/mod.rs的解析逻辑是取项目根目录无则回退当前工作目录再调用task_creation_dir_for_dirsrc/config/mod.rs在task_config.includes中按优先级挑选一个已存在的目录作为创建位置若项目使用内置默认 includes 且相关目录尚未创建则返回第一个默认路径通常即mise-tasks/供命令创建。显式配置的 includes 中必须至少包含一个已存在目录否则会报错 “task includes do not contain an existing directory where a file task can be created”。这一点在 monorepo 或多配置文件中很重要脚本会写到正确的层级而不是无脑落在仓库根。两种模式对照与选择建议维度TOML 模式默认文件模式-f写入位置本地mise.toml的[tasks.name]任务目录下的可执行脚本元数据载体TOML 键#MISE注释行命令体run ...shell 词安全拼接脚本自由正文可多行、可用完整 shell 语法严格模式由任务运行时默认 shell 行为决定模板内建set -euxo pipefail适用场景单行命令、需要--run-windows等 TOML 独占字段复杂多行脚本、已有脚本迁入、依赖管道/函数等 shell 特性两者生成的任务在执行层面完全等价——都进入 mise 的任务调度依赖解析、缓存跳过、wait_for互斥区别仅在于定义形式。TOML 模式独有的--run-windows、--shell不会写入文件任务脚本脚本模板中 shell 仅体现在 shebang 上。自动化使用提示脚本化生成任务因为--分隔符是强制的POSIX shell 中调用需写成mise tasks add lint -d format -- cargo fmt --check的形式RUN 部分整体位于--之后幂等性注意该命令直接覆写目标位置——TOML 模式下同名任务表会被tasks.insert(self.task, ...)替换src/cli/tasks/add.rs文件模式下同名脚本被整体重写均无“已存在则跳过”的检查在 dotfiles 或 provision 脚本中重复执行是安全的等价于更新定义验证手段仓库的端到端测试 e2e/tasks/test_task_add 对三种典型调用依赖数组、--run-windows、--file逐一断言了生成文件的精确内容可作为判断输出格式的权威参照任务定义本身的更多字段与语义如模板变量、缓存行为请继续查阅 TOML 任务参考 与 文件任务参考。【免费下载链接】misedev tools, env vars, task runner项目地址: https://gitcode.com/GitHub_Trending/mi/mise创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表