新しいの作るたび最初にあれこれ設定ファイル(*.json
, .*rc
)を用意すると思いますが、あんましググらずに用意できたことがないなと思って。この辺やっぱり CLI で作れたら楽かな思ったので、mozaとかいうの作りました。
流れ
-
./.moza/
か~/.config/moza/
ディレクトリに*.hbs
(handlebars)ファイルを置く - その頭にフロントマターを記述(yargsのoptions形式)
- その下にhandlebarsで適当にテンプレートを書く
- コマンド実行でテンプレートを展開してファイル作成
プロジェクト固有なのは
./.moza/*.hbs
みたいな
インスト
npm i -g moza
# yarn global add moza
実行。
moza
# npx moza
例
こんなファイルを./.moza/
下に置く。
tsconfig.hbs
---
CONFIG:
description: description
usage: usage
NOTE: |
`preact`や`ink`を使う場合は、`--jsx-factory`に`h`を指定
lib:
alias: l
default:
- es2016
- es2017
- es2017.object
target: es6
jsx:
default: false
type: boolean
jsxFactory:
default: React.Component
type: string
choices:
- React.Component
- h
module: commonjs
---
{
"compilerOptions": {
"target": "{{target}}",
"module": "{{module}}",
"lib": [
{{#each lib}}
"{{this}}"{{#unless @last}},{{/unless}}
{{/each}}
],
{{#if jsx}}
"jsx": "React",
"jsxFactory": "{{jsxFactory}}",
{{/if}}
"strict": true,
"sourceMap": true
},
include: [
"./src/**/*.ts",
"./src/**/*.tsx"
]
}
すると、tsconfig.hbs
というファイルだったので、tsconfig
というコマンドが使えるようになっています。またCONFIG
とNOTE
以外は KebabCase に変換されてフラグで渡せるようになってます。
moza --help # # Commands: # tsconfig # moza tsconfig --help # # Variables: # --lib, -l [default: ["es2016","es2017","es2017.object"]] # --target [default: "es6"] # --jsx [boolean] [default: false] # --jsx-factory # [string] [choices: "React.Component", "h"] [default: "React.Component"] # --module [default: "commonjs"] #
CONFIG.description
にはtsconfig
コマンドの説明。CONFIG.usage
には--help
時に表示される使い方。NOTE
にはmoza note tsconfig
みたいにした時に表示できるテキスト。(npm i ...............
みたいなの書く想定で…)
あとはmoza tsconfig [flags] <dest-path>
みたいな感じで生成だけです。
1つ注意で、
type: array
なフラグがある場合は<dest-path>
の前に--
が必要です。moza foo --value 0 --value 1 --value 2 -- foo.json
以上!
その他
リモートにあるテンプレートファイルを取ってくる
例えばgistとかから。
moza add <url> --output foo.hbs # ダウンロードして ./.moza/foo.hbs へ作成
moza add -g <url> -o foo.hbs # 〃 ~/.config/moza/foo.hbs
持ってるテンプレートファイル一覧を見る
パスも表示されるので削除するときとか。
moza ls # ./.moza/*
moza ls -g # ~/.config/moza/*
ノート表示
moza note <command>