CLI tool in Nue-Js source code.
In this article, we will review the how the CLI tool is written in Nue.js source code.

Nue.js CLI tool supports the below listed commands:
-
Help
-
Serve
-
Build
-
Create
-
Init
We will review Help, Init commands to understand the underlying pattern.
Help command
Let’s find out how help is printed to CLI. At line 126-133 in packages/nuejs/src/cli.js, you will find the below code:
// Only run main when called as real CLI if (esMain(import.meta)) { const args = getArgs(process.argv.slice(2)) // help if (args.help) { await printHelp() // version }
printHelp()
printHelp() is defined in the same cli.js file and has the below code:
async function printHelp() { const { getHelp } = await import('./cli-help.js') console.info(getHelp()) }
Check out the cli-help.js it contains the below code:
#!/usr/bin/env bun import { esMain, log, colors, version, getEngine, openUrl } from './util.js' // [-npe] --> [-n, -p, -e] export function expandArgs(args) { const arr = [] args.forEach(arg => { if (arg[0] == '-' && arg[1] != '-' && arg[2]) { arg.slice(1).split('').forEach(el => arr.push('-' + el)) } else { arr.push(arg) } }) return arr } // TODO: tests export function getArgs(argv) { const commands = ['serve', 'build', 'init', 'create', 'docs'] const args = { paths: [], root: null } let opt expandArgs(argv).forEach((arg) => { // skip if (arg == '--') { // test suite } else if (arg.endsWith('.test.js')) { args.test = true // command } else if (!args.cmd && commands.includes(arg)) { args.cmd = arg // options } else if (!opt && arg[0] == '-') { // booleans if (['-p', '--production'].includes(arg)) args.is_prod = true else if (['-v', '--version'].includes(arg) && !args.cmd) args.version = true else if (['-n', '--dry-run'].includes(arg)) args.dryrun = true else if (['-h', '--help'].includes(arg)) args.help = true else if (['-v', '--verbose'].includes(arg)) args.verbose = true else if (['-b', '--esbuild'].includes(arg)) args.esbuild = true else if (['-l', '--lcss'].includes(arg)) args.lcss = true else if (['-d', '--deploy'].includes(arg)) args.deploy = args.is_prod = true else if (['-I', '--incremental'].includes(arg)) args.incremental = true else if (['-o', '--open'].includes(arg)) args.open = true // string values else if (['-e', '--environment'].includes(arg)) opt = 'env' else if (['-r', '--root'].includes(arg)) opt = 'root' else if (['-P', '--port'].includes(arg)) opt = 'port' else if (['-B', '--base'].includes(arg)) opt = 'base' // bad options else throw `Unknown option: "${arg}"` } else if (arg && arg[0] != '-') { if (opt) { args[opt] = opt == 'port' ? Number(arg) : arg // Number(alphabetic characters) is falsy. Check if port is really set: if (opt != 'port' || (opt == 'port' && args.port)) opt = null } else args.paths.push(arg) } else if (opt) throw `"${opt}" option is not set` }) if (opt) throw `"${opt}" option is not set` return args } async function printHelp() { const { getHelp } = await import('./cli-help.js') console.info(getHelp()) } async function printVersion() { log(`Nue ${version} ${colors.green('•')} ${getEngine()}`) } async function runCommand(args) { if (args.cmd == 'docs') return openUrl('https://nuejs.org/docs/') const { createKit } = await import('./nuekit.js') const { cmd = 'serve', dryrun, deploy, root = null, port } = args const init = cmd == 'init' if (!root) args.root = '.' // ensure root is unset for create, if not set manually console.info('') await printVersion() args.nuekit_version = version // create nue if (cmd == 'create') { const { create } = await import('./create.js') return await create({ ...args, root, port }) } const nue = await createKit(args) if (!nue) return if (args.open) openUrl(`http://localhost:${nue.port}/`) // deployer (private repo) const { deploy: deployer } = deploy ? await import('nue-deployer') : {} // build if (init) { await nue.init(true) if (deploy) await deployer({ root: nue.dist, init: true }) } else if (dryrun || deploy || args.paths[0] || cmd == 'build') { const paths = await nue.build(args.paths) if (!dryrun && deploy && paths[0]) await deployer({ paths, root: nue.dist, init }) // serve } else { await nue.serve() } } // Only run main when called as real CLI if (esMain(import.meta)) { const args = getArgs(process.argv.slice(2)) // help if (args.help) { await printHelp() // version } else if (args.version) { await printVersion() // command } else if (!args.test) { try { await runCommand(args) } catch (e) { console.info(e) } } }
Init command
At line 90 in cli.js, there is this below check:
async function runCommand(args) { if (args.cmd == 'docs') return openUrl('https://nuejs.org/docs/') const { createKit } = await import('./nuekit.js') const { cmd = 'serve', dryrun, deploy, root = null, port } = args const init = cmd == 'init'
At line 112 in the cli.js, you will find the below code:
if (init) { await nue.init(true) if (deploy) await deployer({ root: nue.dist, init: true }) }
nue.init? where is that coming from? you will see this below code at line 104
const nue = await createKit(args)
createKit
createKit is exported from nuekit.js and has 383 LOC at the time of writing this article. Since we are interested in init, I searched for “init” in this nuekit.js file and found the below code:
async function init(force) { await initNueDir({ dist, is_dev, esbuild, force }) }
initNueDir is imported from a file named init.js. Similarly I saw create.js.
About me:
Hey, my name is Ramu Narasinga. I study large open-source projects and create content about their codebase architecture and best practices, sharing it through articles, videos.
I am open to work on interesting projects. Send me an email at ramu.narasinga@gmail.com
My Github — https://github.com/ramu-narasinga
My website — https://ramunarasinga.com
My Youtube channel — https://www.youtube.com/@ramu-narasinga
Learning platform — https://thinkthroo.com
Codebase Architecture — https://app.thinkthroo.com/architecture
Best practices — https://app.thinkthroo.com/best-practices
Production-grade projects — https://app.thinkthroo.com/production-grade-projects