Jsonnetで複数ファイルへ出力する

  #jsonnet

jsonnetの成果物を1ファイルでなく、複数ファイルへ出力したい。
Getting Startedに思いっきり書いてあった。

$ cat multi.jsonnet
{
  'a.json': {
    a: 'foo',
  },
  'b.json': {
    b: 'bar',
  },
}

こんな感じで {"FILE_NAME": "OBJECT", ...} として記述するだけ。
-m オプションでファイルごとに出力される。

$ jsonnet -h | grep -A1 multi
  -m / --multi <dir>         Write multiple files to the directory, list files
                             on stdout

$ jsonnet -m dist multi.jsonnet
dist/a.json
dist/b.json

$ cat dist/a.json
{
   "a": "foo"
}

$ cat dist/b.json
{
   "b": "bar"
}

ちなみに -c オプションでtargetディレクトリが存在しない場合は作成してくれる。

$ jsonnet -h | grep -A1 cre
  -c / --create-output-dirs  Automatically creates all parent directories for
                             files

$ jsonnet -c -m dist multi.jsonnet
dist/a.json
dist/b.json

サブディレクトリも作成できる。

$ cat multi.jsonnet
{
  'a.json': {
    a: 'foo',
  },
  'b/bb.json': {
    b: 'bar',
  },
  'c/cc/ccc.json': {
    c: 'baz',
  },
}

$ jsonnet -c -m dist multi.jsonnet
dist/a.json
dist/b/bb.json
dist/c/cc/ccc.json

$ tree dist
dist
├── a.json
├── b
│   └── bb.json
└── c
    └── cc
        └── ccc.json

3 directories, 3 files

comments powered by Disqus