Skip to content

Commit 9ab32c5

Browse files
authored
refactor: move install-global-cli script to tools package (#457)
- Add install-global-cli subcommand to @voidzero-dev/vite-plus-tools - Local dev (bootstrap-cli) now installs CLI as `vp` command - CI (bootstrap-cli:ci) continues to install as `vite` command - Uses different package name for local install to avoid conflicts
1 parent 12108b2 commit 9ab32c5

4 files changed

Lines changed: 55 additions & 4 deletions

File tree

CONTRIBUTING.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,7 @@ pnpm install
4242

4343
```
4444
pnpm bootstrap-cli
45-
vite --version
45+
vp --version
4646
```
47+
48+
Note: Local development installs the CLI as `vp` (package name: `vite-plus-cli-dev`) to avoid overriding the published `vite-plus-cli` package and its `vite` bin name. In CI, `pnpm bootstrap-cli:ci` installs it as `vite`.

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@
99
"type": "module",
1010
"scripts": {
1111
"build": "pnpm -F @voidzero-dev/* -F vite-plus -F vite-plus-cli build",
12-
"bootstrap-cli": "pnpm build && pnpm install-global-cli",
12+
"bootstrap-cli": "pnpm build && pnpm install-global-cli:local",
1313
"bootstrap-cli:ci": "pnpm install-global-cli",
14-
"install-global-cli": "pnpm --filter=vite-plus-cli copy-binding && npm install -g ./packages/global --force",
14+
"install-global-cli": "pnpm --filter=vite-plus-cli copy-binding && tool install-global-cli vite",
15+
"install-global-cli:local": "pnpm --filter=vite-plus-cli copy-binding && tool install-global-cli vp",
1516
"typecheck": "tsgo -b tsconfig.json",
1617
"tsgo": "tsgo -b tsconfig.json",
1718
"lint": "vite lint --type-aware --threads 4",

packages/tools/src/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,14 @@ switch (subcommand) {
2121
const { mergePeerDeps } = await import('./merge-peer-deps.ts');
2222
mergePeerDeps();
2323
break;
24+
case 'install-global-cli':
25+
const { installGlobalCli } = await import('./install-global-cli.ts');
26+
installGlobalCli();
27+
break;
2428
default:
2529
console.error(`Unknown subcommand: ${subcommand}`);
2630
console.error(
27-
'Available subcommands: snap-test, replace-file-content, sync-remote, json-sort, merge-peer-deps',
31+
'Available subcommands: snap-test, replace-file-content, sync-remote, json-sort, merge-peer-deps, install-global-cli',
2832
);
2933
process.exit(1);
3034
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { execSync } from 'node:child_process';
2+
import { readFileSync, writeFileSync } from 'node:fs';
3+
import path from 'node:path';
4+
import { parseArgs } from 'node:util';
5+
6+
export function installGlobalCli() {
7+
const { positionals } = parseArgs({
8+
allowPositionals: true,
9+
args: process.argv.slice(3),
10+
});
11+
12+
const binName = positionals[0];
13+
if (!binName || !['vp', 'vite'].includes(binName)) {
14+
console.error('Usage: tool install-global-cli <vp|vite>');
15+
process.exit(1);
16+
}
17+
18+
console.log(`Installing global CLI with bin name: ${binName}`);
19+
20+
if (binName === 'vite') {
21+
// CI: use original package.json settings
22+
execSync('npm install -g ./packages/global --force', {
23+
stdio: 'inherit',
24+
});
25+
return;
26+
}
27+
28+
// Local development: temporarily modify package.json to avoid conflicts
29+
const packageJsonPath = path.resolve('packages/global/package.json');
30+
const originalContent = readFileSync(packageJsonPath, 'utf-8');
31+
const packageJson = JSON.parse(originalContent);
32+
33+
packageJson.name = 'vite-plus-cli-dev';
34+
packageJson.bin = { vp: './bin/vite' };
35+
36+
try {
37+
writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
38+
execSync('npm install -g ./packages/global --force', {
39+
stdio: 'inherit',
40+
});
41+
} finally {
42+
writeFileSync(packageJsonPath, originalContent);
43+
}
44+
}

0 commit comments

Comments
 (0)