diff --git a/lib/node-package-manager.ts b/lib/node-package-manager.ts index 7e3e1138e7..24558cdf22 100644 --- a/lib/node-package-manager.ts +++ b/lib/node-package-manager.ts @@ -24,7 +24,8 @@ export class NodePackageManager implements INodePackageManager { config["ignore-scripts"] = true; } - let jsonContentBefore = this.$fs.readJson(path.join(pathToSave, "package.json")); + let packageJsonPath = path.join(pathToSave, "package.json"); + let jsonContentBefore = this.$fs.readJson(packageJsonPath); let dependenciesBefore = _.keys(jsonContentBefore.dependencies).concat(_.keys(jsonContentBefore.devDependencies)); let flags = this.getFlagsString(config, true); @@ -54,6 +55,8 @@ export class NodePackageManager implements INodePackageManager { this.$logger.warn(err.message); } else { // All other errors should be handled by the caller code. + // Revert package.json contents to preserve valid state + this.$fs.writeJson(packageJsonPath, jsonContentBefore); throw err; } } diff --git a/lib/npm-installation-manager.ts b/lib/npm-installation-manager.ts index 0f5b197cc6..7b8d91c254 100644 --- a/lib/npm-installation-manager.ts +++ b/lib/npm-installation-manager.ts @@ -3,8 +3,6 @@ import * as semver from "semver"; import * as constants from "./constants"; export class NpmInstallationManager implements INpmInstallationManager { - private static NPM_LOAD_FAILED = "Failed to retrieve data from npm. Please try again a little bit later."; - constructor(private $npm: INodePackageManager, private $childProcess: IChildProcess, private $logger: ILogger, @@ -52,7 +50,8 @@ export class NpmInstallationManager implements INpmInstallationManager { return this.installCore(packageToInstall, pathToSave, version, dependencyType).wait(); } catch (error) { this.$logger.debug(error); - this.$errors.fail("%s. Error: %s", NpmInstallationManager.NPM_LOAD_FAILED, error); + + throw new Error(error); } }).future()(); diff --git a/lib/services/platform-service.ts b/lib/services/platform-service.ts index bceec10857..1607ba1710 100644 --- a/lib/services/platform-service.ts +++ b/lib/services/platform-service.ts @@ -94,9 +94,10 @@ export class PlatformService implements IPlatformService { } let spinner = new clui.Spinner("Installing " + packageToInstall); + let projectDir = this.$projectData.projectDir; try { spinner.start(); - let downloadedPackagePath = this.$npmInstallationManager.install(packageToInstall, this.$projectData.projectDir, npmOptions).wait(); + let downloadedPackagePath = this.$npmInstallationManager.install(packageToInstall, projectDir, npmOptions).wait(); let frameworkDir = path.join(downloadedPackagePath, constants.PROJECT_FRAMEWORK_FOLDER_NAME); frameworkDir = path.resolve(frameworkDir);