How toUse package.json#bin to create a CLI
Let's say you want to have some scripts in your app that you need to run from time to time, maybe you're building a script to generate code or run another process.
Typically in JS, you will use the package.json
's scripts options like this.
package.json { "scripts": { "generate": "tsx scripts/generate.ts" } }
Then run it with npm run generate
.
But the package.json
has a key bin
that can be used to create scripts that we can later run using npx
and we can point to a file in our application
package.json { "bin": { "generate": "./scripts/generate.js" } }
Then we can create our file and add the hashbang at the top.
scripts/generate.js #!/usr/bin/env node console.log("running generate script");
And run it using npx generate
.
And if we want to use TypeScript we could switch to use Bun instead of Node.
scripts/generate.ts #!/usr/bin/env bun console.log("running generate script");
Allowing us now to use a TS file and access to any Bun feature.
Combining this with other packages like arg and chalk we could build a complete CLI inside our project scripts folder and run it with npx
as if it was a package we installed in our project.