
Security News
rv Is a New Rust-Powered Ruby Version Manager Inspired by Python's uv
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Use a hierarchical directory tree to hold your CLI app multi-level subcommands.
This came about from a desire to add more structure to a tool with many nested subcommands, something that can be achieved in other modules, but often with a non-trivial amount of boilerplate. From a performance standpoint Cliche is lazy loading to be as quick as possible even when dealing with very large numbers of subcommands.
For those that like backronyms, how about: CLI Command Hierarchy Executor?
Install with npm
.
npm install cliche
index.js
'use strict'
const cliche = require('cliche')
cliche({
name: 'cliche-example',
root: './app',
routes: [
'commander',
'foo/bar',
'foo/baz',
'hello/world'
]
})
app structure
example
├── app
│ ├── commander.js # example integration with commander
│ ├── foo
│ │ ├── bar.js # example commands
│ │ ├── baz.js
│ │ └── .meta.js # metadata for the foo group
│ ├── hello
│ │ └── world.js
│ ├── .meta.js # metadata for the root group
│ └── .version.js # version information
├── index.js
└── package.json
Cliche can integrate with other CLI frameworks and option parsers on a command
by command basis. An example integration with commander
can be
found in example/app/commander.js
.
A very complementary module is glob
which can remove the overhead of
maintaining a list of routes. An example of how this can be achieved can be
found in example/globbed.js
.
There are two levels of metadata: the command level and the directory level.
Currently the only metadata supported for commands is a description
used for
generating usage information. It can be set on module.exports.description
of
the relevant command.
$ node example hello
[...]
Available subcommands:
world a computer program that outputs "Hello, World!"
Directories function as parent commands, and as such have both a short
description
which acts as a summary when viewing the parent command, and
a longer, more informational about
to be shown when in the current command.
These values are contained in .meta.js
files in the directory itself.
$ node example
[...]
Available subcommands:
foo serves only to demonstrate a concept
$ node example foo
usage: cliche-example foo <command> [<args>]
A parent to both the bar and baz nested subcommands.
Available subcommands:
[...]
A top-level --version
flag can be supported by providing a .version.js
file.
$ node example --version
version 1.0.0
All commands shown in this file can be run from the root of the repo, and the example project can be copied to use as a base for a new project. The example app is fully usable to get a feel for how Cliche works, here are some commands to try:
$ node example
$ node example --version
$ node example foo
$ node example foo bar now we can pass some arguments
$ node example hello world
$ node example commander --cherries
FAQs
The simple lazy-loading command-line router
We found that cliche demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.
Security News
AGENTS.md is a fast-growing open format giving AI coding agents a shared, predictable way to understand project setup, style, and workflows.