Building Command Line Interfaces with Node.js
Explore methods for developing command-line applications using Node.js, enhancing automation and scripting capabilities.
0 likes
178 views
Rule Content
{
"title": "Building Command Line Interfaces with Node.js",
"description": "Explore methods for developing command-line applications using Node.js, enhancing automation and scripting capabilities.",
"category": "Node.js Cursor Rules",
"rules": [
{
"name": "Use a Command-Line Argument Parsing Library",
"description": "Utilize libraries like 'yargs' or 'commander' to handle command-line arguments, ensuring POSIX-compliant syntax and improved user experience.",
"examples": [
{
"before": "const args = process.argv.slice(2);",
"after": "const yargs = require('yargs/yargs');\nconst { argv } = yargs(process.argv.slice(2)).option('verbose', { alias: 'v', type: 'boolean', description: 'Run with verbose logging' });"
}
],
"references": [
"https://dev.to/boudydegeer/mastering-nodejs-cli-best-practices-and-tips-7j5"
]
},
{
"name": "Implement Consistent Naming Conventions",
"description": "Adopt consistent naming conventions for variables, functions, and files to enhance code readability and maintainability.",
"examples": [
{
"before": "let user_name = 'John';\nfunction GetUserData() {}",
"after": "let userName = 'John';\nfunction getUserData() {}"
}
],
"references": [
"https://medium.com/deno-the-complete-reference/five-clean-coding-best-practices-in-node-js-1651d5fd3ffc"
]
},
{
"name": "Ensure Cross-Platform Compatibility",
"description": "Design CLI applications to function seamlessly across different operating systems by handling file paths and command syntax appropriately.",
"examples": [
{
"before": "const myPath = `${__dirname}/../bin/myBin.js`;",
"after": "const path = require('path');\nconst myPath = path.join(__dirname, '..', 'bin', 'myBin.js');"
}
],
"references": [
"https://github.com/IvanDrop9/nodejs-cli-apps-best-practices"
]
},
{
"name": "Accept Input via Standard Input (STDIN)",
"description": "Enable the CLI to accept input through STDIN to facilitate integration with other command-line tools and support piping.",
"examples": [
{
"before": "const input = process.argv[2];",
"after": "const readline = require('readline');\nconst rl = readline.createInterface({ input: process.stdin, output: process.stdout });\nrl.question('Enter input: ', (answer) => { /* process answer */ rl.close(); });"
}
],
"references": [
"https://github.com/IvanDrop9/nodejs-cli-apps-best-practices"
]
},
{
"name": "Provide Structured Output",
"description": "Offer options for structured output formats like JSON to facilitate parsing and integration with other tools.",
"examples": [
{
"before": "console.log('Result: ' + result);",
"after": "console.log(JSON.stringify({ result }));"
}
],
"references": [
"https://github.com/IvanDrop9/nodejs-cli-apps-best-practices"
]
},
{
"name": "Handle POSIX Signals Gracefully",
"description": "Implement handlers for POSIX signals like SIGINT to ensure the CLI terminates gracefully and cleans up resources.",
"examples": [
{
"before": "// No signal handling",
"after": "process.on('SIGINT', () => { console.log('Process interrupted. Exiting gracefully.'); process.exit(0); });"
}
],
"references": [
"https://dev.to/boudydegeer/mastering-nodejs-cli-best-practices-and-tips-7j5"
]
},
{
"name": "Use ESLint for Code Consistency",
"description": "Integrate ESLint into the project to enforce code style and catch potential errors early.",
"examples": [
{
"before": "// No linting setup",
"after": "npx eslint --init"
}
],
"references": [
"https://developers.redhat.com/articles/2021/05/17/introduction-nodejs-reference-architecture-part-3-code-consistency"
]
},
{
"name": "Modularize Code for Maintainability",
"description": "Organize code into modules based on functionality to improve readability and facilitate testing.",
"examples": [
{
"before": "// All logic in a single file",
"after": "commands/\n user.js\nservices/\n api.js\nutils/\n format.js\nindex.js"
}
],
"references": [
"https://expertbeacon.com/writing-command-line-interfaces-in-node-js-like-an-expert/"
]
}
]
}