diff --git a/packages/vite-node/package.json b/packages/vite-node/package.json index 8ed68206a52d..252dc3519e31 100644 --- a/packages/vite-node/package.json +++ b/packages/vite-node/package.json @@ -64,13 +64,12 @@ }, "dependencies": { "kolorist": "^1.5.1", - "minimist": "^1.2.6", "mlly": "^0.5.2", "pathe": "^0.2.0", "vite": "^2.9.7" }, "devDependencies": { - "@types/minimist": "^1.2.2", + "cac": "^6.7.12", "rollup": "^2.71.1" }, "engines": { diff --git a/packages/vite-node/src/cli.ts b/packages/vite-node/src/cli.ts index 66a7ab50294e..3867136a6714 100644 --- a/packages/vite-node/src/cli.ts +++ b/packages/vite-node/src/cli.ts @@ -1,71 +1,42 @@ -import minimist from 'minimist' +import cac from 'cac' import { dim, red } from 'kolorist' import { createServer } from 'vite' +import { version } from '../package.json' import { ViteNodeServer } from './server' import { ViteNodeRunner } from './client' -const argv = minimist(process.argv.slice(2), { - 'alias': { - r: 'root', - c: 'config', - h: 'help', - w: 'watch', - s: 'silent', - }, - '--': true, - 'string': ['root', 'config'], - 'boolean': ['help', 'watch', 'silent'], - unknown(name: string) { - if (name[0] === '-') { - console.error(red(`Unknown argument: ${name}`)) - help() - process.exit(1) - } - return true - }, -}) - -if (argv.help) { - help() - process.exit(0) -} - -if (!argv._.length) { - console.error(red('No files specified.')) - help() - process.exit(1) -} +const cli = cac('vite-node') -// forward argv -process.argv = [...process.argv.slice(0, 2), ...(argv['--'] || [])] +cli + .version(version) + .option('-r, --root ', 'Use specified root directory') + .option('-c, --config ', 'Use specified config file') + .option('-w, --watch', 'Restart on file changes, similar to "nodemon"') + .help() -run(argv) +cli + .command('[...files]') + .action(run) -function help() { - // eslint-disable-next-line no-console - console.log(` -Usage: - $ vite-node [options] [files] - -Options: - -r, --root ${dim('[string]')} use specified root directory - -c, --config ${dim('[string]')} use specified config file - -w, --watch ${dim('[boolean]')} restart on file changes, similar to "nodemon" - -s, --silent ${dim('[boolean]')} do not emit errors and logs - --vue ${dim('[boolean]')} support for importing Vue component -`) -} +cli.parse() export interface CliOptions { - files?: string[] - _?: string[] root?: string config?: string watch?: boolean + '--'?: string[] } -async function run(options: CliOptions = {}) { - const files = options.files || options._ || [] +async function run(files: string[], options: CliOptions = {}) { + if (!files.length) { + console.error(red('No files specified.')) + cli.outputHelp() + process.exit(1) + } + + // forward argv + process.argv = [...process.argv.slice(0, 2), ...(options['--'] || [])] + const server = await createServer({ logLevel: 'error', configFile: options.config, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f662e7e67ee7..36304c9cbbdd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -591,21 +591,19 @@ importers: packages/vite-node: specifiers: - '@types/minimist': ^1.2.2 + cac: ^6.7.12 kolorist: ^1.5.1 - minimist: ^1.2.6 mlly: ^0.5.2 pathe: ^0.2.0 rollup: ^2.71.1 vite: ^2.9.5 dependencies: kolorist: 1.5.1 - minimist: 1.2.6 mlly: 0.5.2 pathe: 0.2.0 vite: 2.9.5 devDependencies: - '@types/minimist': 1.2.2 + cac: 6.7.12 rollup: 2.71.1 packages/vitest: @@ -14214,6 +14212,7 @@ packages: /minimist/1.2.6: resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + dev: true /minipass-collect/1.0.2: resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==}