Ana içeriğe geç

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.

bilgi

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`);
}
},
]);