diff --git a/.changes/updater-issue-without-npm b/.changes/updater-issue-without-npm new file mode 100644 index 000000000..3518afb9b --- /dev/null +++ b/.changes/updater-issue-without-npm @@ -0,0 +1,5 @@ +--- +"tauri.js": patch +--- + +Fixes an issue with the dependency updater when NPM isn't installed. diff --git a/cli/tauri.js/src/api/dependency-manager/util.ts b/cli/tauri.js/src/api/dependency-manager/util.ts index ae3e719ce..a6a7ad8a7 100644 --- a/cli/tauri.js/src/api/dependency-manager/util.ts +++ b/cli/tauri.js/src/api/dependency-manager/util.ts @@ -23,7 +23,12 @@ async function getCrateLatestVersion(crateName: string): Promise { } function getNpmLatestVersion(packageName: string): string { - const child = crossSpawnSync('npm', ['show', packageName, 'version'], { + const usesYarn = existsSync(appResolve.app('yarn.lock')) + const cmd = usesYarn ? 'yarn' : 'npm' + const args = usesYarn + ? ['--silent', 'info', packageName, 'version'] + : ['show', packageName, 'version'] + const child = crossSpawnSync(cmd, args, { cwd: appDir }) return String(child.output[1]).replace('\n', '') @@ -32,12 +37,13 @@ function getNpmLatestVersion(packageName: string): string { async function getNpmPackageVersion( packageName: string ): Promise { + const usesYarn = existsSync(appResolve.app('yarn.lock')) + const cmd = usesYarn ? 'yarn' : 'npm' + const args = usesYarn + ? ['--silent', 'list', packageName, 'version', '--depth', '0'] + : ['list', packageName, 'version', '--depth', '0'] return await new Promise((resolve) => { - const child = crossSpawnSync( - 'npm', - ['list', packageName, 'version', '--depth', '0'], - { cwd: appDir } - ) + const child = crossSpawnSync(cmd, args, { cwd: appDir }) const output = String(child.output[1]) // eslint-disable-next-line security/detect-non-literal-regexp const matches = new RegExp(packageName + '@(\\S+)', 'g').exec(output)