From fb8a51f52742db64dc80aa9aefb63b9fd6f4ca32 Mon Sep 17 00:00:00 2001 From: Jinwoo-H Date: Sun, 9 Aug 2026 23:26:22 -0400 Subject: [PATCH] fix(server): invoke npm through Node on Windows --- config/scripts/verify-node-server-package.mjs | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/config/scripts/verify-node-server-package.mjs b/config/scripts/verify-node-server-package.mjs index 5f71b118d3f..eb435f0b066 100644 --- a/config/scripts/verify-node-server-package.mjs +++ b/config/scripts/verify-node-server-package.mjs @@ -1,15 +1,17 @@ import { spawn } from 'node:child_process' -import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' +import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' -import { join, resolve } from 'node:path' +import { dirname, join, resolve } from 'node:path' const repoRoot = resolve(import.meta.dirname, '..', '..') const packageRoot = join(repoRoot, 'resources', 'npm-server') const temporaryRoot = mkdtempSync(join(tmpdir(), 'orca-server-package-')) -const npmCommand = process.platform === 'win32' ? 'npm.cmd' : 'npm' +const npmCommand = process.platform === 'win32' ? process.execPath : 'npm' +const npmCommandArgs = getNpmCommandArgs() try { const packOutput = await runCapture(npmCommand, [ + ...npmCommandArgs, 'pack', packageRoot, '--json', @@ -29,6 +31,7 @@ try { JSON.stringify({ private: true, name: 'orca-server-package-verifier', version: '0.0.0' }) ) await run(npmCommand, [ + ...npmCommandArgs, 'install', join(temporaryRoot, packed.filename), '--no-audit', @@ -42,6 +45,7 @@ try { verifyManifest(installedManifest) const cliPath = join(installedRoot, 'dist', 'cli.js') const help = await runCapture(npmCommand, [ + ...npmCommandArgs, '--prefix', installRoot, 'exec', @@ -53,7 +57,15 @@ try { throw new Error('installed CLI help is unavailable') } const version = ( - await runCapture(npmCommand, ['--prefix', installRoot, 'exec', '--', 'orca-ide', '--version']) + await runCapture(npmCommand, [ + ...npmCommandArgs, + '--prefix', + installRoot, + 'exec', + '--', + 'orca-ide', + '--version' + ]) ).trim() if (version !== installedManifest.version) { throw new Error('installed CLI version is inconsistent') @@ -114,6 +126,17 @@ function verifyManifest(manifest) { } } +function getNpmCommandArgs() { + if (process.platform !== 'win32') { + return [] + } + const npmCliPath = join(dirname(process.execPath), 'node_modules', 'npm', 'bin', 'npm-cli.js') + if (!existsSync(npmCliPath)) { + throw new Error(`npm CLI is missing beside Node: ${npmCliPath}`) + } + return [npmCliPath] +} + function run(command, args) { return new Promise((resolveRun, rejectRun) => { const child = spawn(command, args, { stdio: 'inherit' })