A site with four modules, and a build that is a shell script calling one binary.
#!/usr/bin/env bash
set -euo pipefail
esbuild src/main.ts
--bundle --minify --format=esm --target=es2022
--entry-names='[name]-[hash]'
--outdir=dist/assets
--metafile=dist/meta.json
jq -r '.outputs | keys[]' dist/meta.json
| sed 's|^dist/||' > dist/manifest.txt
The metafile is what makes the hashed filename usable — something has to tell the template which file to reference, and that is the one piece a bundler provides that a single command does not. Twelve lines against a configuration file is not obviously better and it is obviously smaller, and the honest argument is that nobody has to know a tool’s option vocabulary to read it.