Hadi Başlayalım!
Kurulum
Clipanion'u projenize Yarn kullanarak ekleyin:
yarn add clipanion
İlk komutunuz
Bir komut dosyası oluşturun, diyelim ki HelloCommand.ts
(burada TypeScript kullanacağız, ancak normal JavaScript kullanıyorsanız neredeyse aynı, belki de import stili dışında):
import {Command, Option} from 'clipanion';
export class HelloCommand extends Command {
name = Option.String();
async execute() {
this.context.stdout.write(`Merhaba ${this.name}!\n`);
}
}
İlk komutunuz için hepsi bu. Sadece bir sınıf tanımlamanız, temel Command
sınıfından genişletmeniz, seçeneklerinizi normal özellikler olarak belirtmeniz ve bir async execute
üye işlevini uygulamanız gerekiyor.
execute
'nin console.log
yerine this.context.stdout.write
kullandığını unutmayın. İsteğe bağlı olsa da, bu kuralı korumak iyi bir uygulama olarak görülebilir, böylece komutlar birbirini arayabilir ve çıktıları tamponlayabilir.
CLI'nizi çalıştırın
Komutlar, runExit
işlevine geçirilerek çağrılabilir:
import {Command, Option, runExit} from 'clipanion';
runExit(class HelloCommand extends Command {
name = Option.String();
async execute() {
this.context.stdout.write(`Merhaba ${this.name}!\n`);
}
});
Alternatif olarak, CLI örneğini kendiniz oluşturabilirsiniz; runExit
'in yaptığı budur:
import {Command} from 'clipanion';
class HelloCommand extends Command {
async execute() {}
}
// ---cut---
import {Cli} from 'clipanion';
const [node, app, ...args] = process.argv;
const cli = new Cli({
binaryLabel: `Uygulamam`,
binaryName: `${node} ${app}`,
binaryVersion: `1.0.0`,
})
cli.register(HelloCommand);
cli.runExit(args);
Birden fazla komut kaydetme
CLI'nize farklı paths
statik özellikleriyle birden fazla komut ekleyebilirsiniz. Örneğin:
import {Command, Option, runExit} from 'clipanion';
runExit([
class AddCommand extends Command {
static paths = [[`add`]];
name = Option.String();
async execute() {
this.context.stdout.write(`Ekleniyor ${this.name}!\n`);
}
},
class RemoveCommand extends Command {
static paths = [[`remove`]];
name = Option.String();
async execute() {
this.context.stdout.write(`Kaldırılıyor ${this.name}!\n`);
}
},
]);