DEBUG.WIKI
京东云;让 AI 进入真实业务;零售 · 物流 · 客服 · 硬件;查看方案 →
阿里云;从建站到云上业务;云服务器 · 数据库 · 对象存储;查看产品 →
雨云;给项目一台云服务器

astro-check 忽略开头参数:检查独立命令的 argv 截取

独立 astro-check 的 help、root 或 tsconfig 没有生效,而 astro check 正常。核对 @astrojs/check 版本并移除旧的补位参数。

执行 astro-check --help 却直接开始诊断,或者 --root src、--tsconfig tsconfig.app.json 像没传一样。若使用独立的 astro-check 二进制,先核对 @astrojs/check,重点检查独立命令收到的参数,不必先调整 Astro 配置优先级。

正式 @astrojs/check 0.9.11 的 bin 先传入 process.argv.slice(2),解析函数又调用 hideBin() 去掉两个元素,最终丢失开头两个用户参数。0.9.12 的正式包已改成传完整 process.argv,只在解析器里截取一次。

不同参数顺序可能制造“有时生效”的错觉

例如 astro-check --root src --watch 中,前两个元素被去掉后,watch 仍能被解析,root 却没有进入解析器。把 watch 放到最前面又会得到另一组结果;这不是参数之间互相覆盖,而是位置已经被截断。

先保存实际执行脚本、参数顺序和解析出的检查根目录,确认调用的是 astro-check,还是 Astro CLI 的 astro check。后者传完整 argv,不走同一条重复截取入口。

不应为了吸收两个丢失的位置,长期在命令里塞无意义占位参数。修正版本后,这些额外元素会重新进入解析器,尤其是旧的 -- -- 补位会把后面的内容变成位置参数,导致本来要读取的选项再次失效。

更新独立工具,或使用项目原有的 Astro CLI

项目兼容时更新到包含修正的 @astrojs/check 0.9.12,核对实际命令解析到的包版本,并审查 package.json 脚本是否留有旧补位。如果旧脚本是:

astro-check -- -- --tsconfig ./tsconfig.components.json

修正版本下应把参数直接交给解析器:

astro-check --tsconfig ./tsconfig.components.json

路径是示例,应保留项目真正的配置文件和其他有效选项。包管理器为转发参数使用的分隔符,与脚本内部手工补的两个参数不是一回事;修改时沿实际 argv 逐层确认,不能全局删除所有 --。

暂时不能更新独立包,而项目已有 Astro CLI 时,可以评估改用 astro check 并保留原检查范围。它可能同时执行项目同步流程,应按已有工作目录与配置运行,不能因为入口换了就取消诊断或检查失败退出码。

验收先确认 help 真正打印帮助,再用一个有明确错误、位于目标 root 或指定 tsconfig 范围内的文件检查选项确实生效。watch 还需修改该文件并观察诊断更新。退出 0 只能证明这次检查没有报告错误,不能证明检查了原本想检查的目录。