From c5d576266f5be6aa2402ebc8723d0e6f279c5bc2 Mon Sep 17 00:00:00 2001 From: Benjamin Newman Date: Wed, 21 Jan 2026 16:53:40 -0800 Subject: [PATCH] docs: add util.parseArgs replacements for CLI argument parsers --- docs/modules/parseargs.md | 27 ++++++++++++++++++++ manifests/preferred.json | 54 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 docs/modules/parseargs.md diff --git a/docs/modules/parseargs.md b/docs/modules/parseargs.md new file mode 100644 index 0000000..5a726b6 --- /dev/null +++ b/docs/modules/parseargs.md @@ -0,0 +1,27 @@ +--- +description: Modern alternatives to CLI argument parsing packages using Node.js built-in util.parseArgs +--- + +# Replacements for argument parsers + +## `util.parseArgs` (native, Node.js) + +[`util.parseArgs`](https://nodejs.org/api/util.html#utilparseargsconfig) is built into Node.js (since 18.3.0 and 16.17.0) and can replace many common CLI parsing libraries such as `minimist`, `mri`, `arg`, `meow`, `yargs-parser`, `yargs`, `commander`, and `sade`. + +Example: + +```ts +import { parseArgs } from 'node:util' + +const { values, positionals } = parseArgs({ + args: process.argv.slice(2), + options: { + force: { type: 'boolean', short: 'f' }, + output: { type: 'string', short: 'o' }, + }, + allowPositionals: true, +}) +``` + +> [!NOTE] +> `parseArgs` only supports `string` and `boolean` types and does not provide subcommand routing, auto-generated help, or validation. If your CLI relies heavily on these features, evaluate whether the dependency savings justify the added code. diff --git a/manifests/preferred.json b/manifests/preferred.json index 90fd04a..2c2e754 100644 --- a/manifests/preferred.json +++ b/manifests/preferred.json @@ -18,6 +18,12 @@ "replacements": ["node:stream"], "url": {"type": "e18e", "id": "through"} }, + "arg": { + "type": "module", + "moduleName": "arg", + "replacements": ["util.parseArgs"], + "url": {"type": "e18e", "id": "parseargs"} + }, "axios": { "type": "module", "moduleName": "axios", @@ -84,6 +90,12 @@ "replacements": ["util.styleText", "picocolors", "ansis"], "url": {"type": "e18e", "id": "chalk"} }, + "commander": { + "type": "module", + "moduleName": "commander", + "replacements": ["util.parseArgs"], + "url": {"type": "e18e", "id": "parseargs"} + }, "core-util-is": { "type": "module", "moduleName": "core-util-is", @@ -2304,6 +2316,18 @@ "replacements": ["node:crypto"], "url": {"type": "e18e", "id": "md5"} }, + "meow": { + "type": "module", + "moduleName": "meow", + "replacements": ["util.parseArgs"], + "url": {"type": "e18e", "id": "parseargs"} + }, + "minimist": { + "type": "module", + "moduleName": "minimist", + "replacements": ["util.parseArgs"], + "url": {"type": "e18e", "id": "parseargs"} + }, "mkdirp": { "type": "module", "moduleName": "mkdirp", @@ -2316,6 +2340,12 @@ "replacements": ["day.js", "date-fns", "luxon", "Date"], "url": {"type": "e18e", "id": "moment"} }, + "mri": { + "type": "module", + "moduleName": "mri", + "replacements": ["util.parseArgs"], + "url": {"type": "e18e", "id": "parseargs"} + }, "node-fetch": { "type": "module", "moduleName": "node-fetch", @@ -2464,6 +2494,12 @@ "replacements": ["fs.rm", "fs.rmdir", "premove"], "url": {"type": "e18e", "id": "rimraf"} }, + "sade": { + "type": "module", + "moduleName": "sade", + "replacements": ["util.parseArgs"], + "url": {"type": "e18e", "id": "parseargs"} + }, "set-value": { "type": "module", "moduleName": "set-value", @@ -2559,6 +2595,18 @@ "moduleName": "xmldom", "replacements": ["@xmldom/xmldom"], "url": {"type": "e18e", "id": "xmldom"} + }, + "yargs": { + "type": "module", + "moduleName": "yargs", + "replacements": ["util.parseArgs"], + "url": {"type": "e18e", "id": "parseargs"} + }, + "yargs-parser": { + "type": "module", + "moduleName": "yargs-parser", + "replacements": ["util.parseArgs"], + "url": {"type": "e18e", "id": "parseargs"} } }, "replacements": { @@ -3259,6 +3307,12 @@ "nodeFeatureId": {"moduleName": "node:util", "exportName": "types"}, "url": {"type": "node", "id": "api/util.html#utiltypes"} }, + "util.parseArgs": { + "id": "util.parseArgs", + "type": "native", + "nodeFeatureId": {"moduleName": "node:util", "exportName": "parseArgs"}, + "url": {"type": "node", "id": "api/util.html#utilparseargsconfig"} + }, "webpack.output.clean": { "id": "webpack.output.clean", "type": "documented",