This package provides a DI/IoC mechanism for CLI applications with Commander.js and InversifyJS.
Install sgray
and its peer dependencies.
yarn add sgray inversify reflect-metadata
pnpm add sgray inversify reflect-metadata
npm install --save sgray inversify reflect-metadata
InversifyJS requires the experimentalDecorators
, emitDecoratorMetadata
and lib
compilation options in your tsconfig.json
file.
You can also refer to their installation guide.
{
"compilerOptions": {
"types": ["node", "reflect-metadata"],
"strictPropertyInitialization": false,
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
import 'reflect-metadata';
import { exit } from 'node:process';
import { inject, injectable } from 'inversify';
import { Argv, CLI, Command, options } from 'sgray';
interface GreetArgv {
message: string;
}
@injectable()
class GreetCommand implements Command {
static command = 'greet';
static description = 'prints greeting message';
static options = options((cmd) => cmd.option('-m, --message <string>', 'message to print'));
@inject(Argv)
private argv: GreetArgv;
async execute() {
console.log(this.argv.message);
}
}
const cli = new CLI();
cli.register(GreetCommand);
cli.run(process.argv.slice(2)).then(exit);