From 73d64c6427d96e17498481b163f5a229ef7b05c2 Mon Sep 17 00:00:00 2001 From: Dimitar Kerezov Date: Tue, 30 May 2017 12:22:05 +0300 Subject: [PATCH] Conform ios inspector code with npm 5 --- lib/constants.ts | 1 + lib/npm-installation-manager.ts | 31 +++++++++++++++++++++---------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/lib/constants.ts b/lib/constants.ts index 21a4488697..3e0e03ecfe 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -71,3 +71,4 @@ export const TYPESCRIPT_NAME = "typescript"; export const BUILD_OUTPUT_EVENT_NAME = "buildOutput"; export const CONNECTION_ERROR_EVENT_NAME = "connectionError"; export const VERSION_STRING = "version"; +export const INSPECTOR_CACHE_DIRNAME = "ios-inspector"; diff --git a/lib/npm-installation-manager.ts b/lib/npm-installation-manager.ts index 1fc8015910..a483b5d994 100644 --- a/lib/npm-installation-manager.ts +++ b/lib/npm-installation-manager.ts @@ -47,27 +47,38 @@ export class NpmInstallationManager implements INpmInstallationManager { } public async getInspectorFromCache(inspectorNpmPackageName: string, projectDir: string): Promise { - let inspectorPath = path.join(projectDir, "node_modules", inspectorNpmPackageName); + let inspectorPath = path.join(projectDir, constants.NODE_MODULES_FOLDER_NAME, inspectorNpmPackageName); // local installation takes precedence over cache if (!this.inspectorAlreadyInstalled(inspectorPath)) { - let cachepath = (await this.$childProcess.exec("npm get cache")).trim(); - let version = await this.getLatestCompatibleVersion(inspectorNpmPackageName); - let pathToPackageInCache = path.join(cachepath, inspectorNpmPackageName, version); - let pathToUnzippedInspector = path.join(pathToPackageInCache, "package"); + const cachePath = path.join(this.$options.profileDir, constants.INSPECTOR_CACHE_DIRNAME); + this.prepareCacheDir(cachePath); + const pathToPackageInCache = path.join(cachePath, constants.NODE_MODULES_FOLDER_NAME, inspectorNpmPackageName); if (!this.$fs.exists(pathToPackageInCache)) { - await this.$childProcess.exec(`npm cache add ${inspectorNpmPackageName}@${version}`); - let inspectorTgzPathInCache = path.join(pathToPackageInCache, "package.tgz"); - await this.$childProcess.exec(`tar -xf ${inspectorTgzPathInCache} -C ${pathToPackageInCache}`); - await this.$childProcess.exec(`npm install --prefix ${pathToUnzippedInspector}`); + const version = await this.getLatestCompatibleVersion(inspectorNpmPackageName); + await this.$childProcess.exec(`npm install ${inspectorNpmPackageName}@${version} --prefix ${cachePath}`); } + this.$logger.out("Using inspector from cache."); - return pathToUnzippedInspector; + return pathToPackageInCache; } + return inspectorPath; } + private prepareCacheDir(cacheDirName: string): void { + this.$fs.ensureDirectoryExists(cacheDirName); + + const cacheDirPackageJsonLocation = path.join(cacheDirName, constants.PACKAGE_JSON_FILE_NAME); + if (!this.$fs.exists(cacheDirPackageJsonLocation)) { + this.$fs.writeJson(cacheDirPackageJsonLocation, { + name: constants.INSPECTOR_CACHE_DIRNAME, + version: "0.1.0" + }); + } + } + private inspectorAlreadyInstalled(pathToInspector: string): Boolean { if (this.$fs.exists(pathToInspector)) { return true;