vite-nodeでNode.js製のCLIアプリを作る
vite-node を駆使して Viteのビルドスタックを使いながら、WebアプリではなくCLIアプリを作ってしまおうという試み。
サンプルコード
用意するのは package.json と エントリになる index.ts。
tsconfig.json も vite.config.ts も配置せず完全な Zero Configuration で作ってみる
code:package.json
{
"name": "sample",
"version": "0.0.0",
"license": "MIT",
"type": "module",
"scripts": {
"cli": "vite-node ./index.ts --"
},
"dependencies": {
"cac": "^6.7.12",
"vite-node": "^0.12.1"
}
}
CLI の本体になる index.ts はこちら
Node.js 向けのCLI作成用のライブラリの cac を使用します。
code:index.ts
import cac from 'cac'
// cacを初期化
const cli = cac('sample-app')
// コマンドを定義
cli
.command('hello', 'say hello world')
.action(() => {
console.log('Hello World!')
})
// バージョンを設定
cli.version('0.0.0-sample')
// コマンドをパースして実行
cli.parse()
実行結果
code:helloを実行した場合(sh)
$ yarn run cli hello
Hello World!
code:--versionを実行した場合(sh)
$ yarn run cli --version
sample-app/0.0.0-sample linux-x64 node-v18.1.0
感想
Vite をベースとしているのでほぼ何もいらずに CLIアプリがあっという間にできた。
設定いらずなのはとてもたすかるし、めちゃくちゃ早い。
vite-node だけだと型チェックが行われないので、必要な場合は tsc を --noEmit で実行しましょう。