如何通过单条命令一次性批量构建多个Jsonnet文件
Jsonnet 批量编译实现方案
官方原生 Jsonnet 编译器本身未内置多文件批量编译参数,你可以通过 Shell 命令组合实现单条命令完成指定规则的批量/递归编译,常见实现方案如下:
- 方案1:Linux/macOS 环境下使用
find+xargs实现递归编译
该方案可以递归扫描指定目录下所有符合*.jsonnet后缀规则的文件,逐个编译生成同名.json输出文件,示例命令如下:
参数说明:find . -name "*.jsonnet" -type f | xargs -I {} jsonnet {} -o {.}.json.表示从当前工作目录开始扫描,可替换为你需要的指定文件夹路径-I {}会将find命令查询到的每个文件路径替换到后续命令中的{}位置{.}是 xargs 内置语法,会自动去掉匹配文件的后缀名,实现a.jsonnet输出为a.json的效果
- 方案2:Windows 环境下使用 Powershell 单行命令实现
如果你使用 Windows 系统,可直接用 Powershell 原生命令完成递归批量编译:Get-ChildItem -Path . -Recurse -Filter *.jsonnet | ForEach-Object { jsonnet $_.FullName -o ($_.FullName -replace '\.jsonnet$', '.json') } - 进阶用法:自定义输出目录
如果你需要把所有编译后的 JSON 文件统一输出到指定目录(比如dist目录),可以使用如下命令:mkdir -p dist && find . -name "*.jsonnet" -type f | xargs -I {} sh -c 'jsonnet {} -o dist/$(basename {} .jsonnet).json'
注意:如果你的 Jsonnet 文件存在跨文件导入依赖,可在编译命令中添加
-J参数指定依赖库搜索路径,例如添加-J ./lib表示将当前目录下的lib文件夹作为导入搜索路径。
内容的提问来源于stack exchange,提问作者TDN
相关产品推荐
相关产品推荐

