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.