From 317e180e9de41ca93883e38408a06e50948c9bae Mon Sep 17 00:00:00 2001 From: TsvetanMilanov Date: Sat, 14 May 2016 11:43:13 +0300 Subject: [PATCH] Fix add android platform dependencies When checking if platform dependency is installed in the current project before adding the platform need to check if the current version is valid or check in the node_modules directory for the installed plugin version. --- lib/common | 2 +- lib/services/android-project-service.ts | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/common b/lib/common index ef3c1c1f9f..f795a7d429 160000 --- a/lib/common +++ b/lib/common @@ -1 +1 @@ -Subproject commit ef3c1c1f9f45b3abd9820fca3f7664676b247324 +Subproject commit f795a7d429cc5cc44c4b7e280c795dda1710f605 diff --git a/lib/services/android-project-service.ts b/lib/services/android-project-service.ts index e5f24d832e..4572b59a9a 100644 --- a/lib/services/android-project-service.ts +++ b/lib/services/android-project-service.ts @@ -149,12 +149,23 @@ export class AndroidProjectService extends projectServiceBaseLib.PlatformProject let projectPackageJson: any = this.$fs.readJson(this.$projectData.projectFilePath).wait(); _.each(AndroidProjectService.REQUIRED_DEV_DEPENDENCIES, (dependency: any) => { - let dependencyVersionInProject = projectPackageJson.dependencies[dependency.name] || projectPackageJson.devDependencies[dependency.name]; + let dependencyVersionInProject = (projectPackageJson.dependencies && projectPackageJson.dependencies[dependency.name]) || + (projectPackageJson.devDependencies && projectPackageJson.devDependencies[dependency.name]); if (!dependencyVersionInProject) { this.$npm.install(`${dependency.name}@${dependency.version}`, this.$projectData.projectDir, npmConfig).wait(); - } else if (!semver.satisfies(dependencyVersionInProject, dependency.version)) { - this.$errors.failWithoutHelp(`Your project have installed ${dependency.name} version ${dependencyVersionInProject} but Android platform requires version ${dependency.version}.`); + } else { + let cleanedVerson = semver.clean(dependencyVersionInProject); + + // The plugin version is not valid. Check node_modules for the valid version. + if (!cleanedVerson) { + let pathToPluginPackageJson = path.join(this.$projectData.projectDir, constants.NODE_MODULES_FOLDER_NAME, dependency.name, constants.PACKAGE_JSON_FILE_NAME); + dependencyVersionInProject = this.$fs.exists(pathToPluginPackageJson).wait() && this.$fs.readJson(pathToPluginPackageJson).wait().version; + } + + if (!semver.satisfies(dependencyVersionInProject || cleanedVerson, dependency.version)) { + this.$errors.failWithoutHelp(`Your project have installed ${dependency.name} version ${cleanedVerson} but Android platform requires version ${dependency.version}.`); + } } }); } else {