From 2ffdcddf755ccb8caaa3ebe01fd855b2fbdf63fa Mon Sep 17 00:00:00 2001 From: Fatme Havaluova Date: Thu, 1 Oct 2015 11:57:44 +0300 Subject: [PATCH] Do not crash application after upgrade to 1.3.0 https://github.com/NativeScript/nativescript-cli/issues/947 --- lib/constants.ts | 1 + lib/definitions/project.d.ts | 1 + lib/project-data.ts | 5 ++++- lib/services/platform-service.ts | 16 +++++++++------- test/stubs.ts | 1 + 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/constants.ts b/lib/constants.ts index da96453d31..cdda1c6d6a 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -6,6 +6,7 @@ export let APP_RESOURCES_FOLDER_NAME = "App_Resources"; export let PROJECT_FRAMEWORK_FOLDER_NAME = "framework"; export let NATIVESCRIPT_KEY_NAME = "nativescript"; export let NODE_MODULES_FOLDER_NAME = "node_modules"; +export let TNS_MODULES_FOLDER_NAME = "tns_modules"; export let TNS_CORE_MODULES_NAME = "tns-core-modules"; export let PACKAGE_JSON_FILE_NAME = "package.json"; export let NODE_MODULE_CACHE_PATH_KEY_NAME = "node-modules-cache-path"; diff --git a/lib/definitions/project.d.ts b/lib/definitions/project.d.ts index 29108c0432..310a09d5ad 100644 --- a/lib/definitions/project.d.ts +++ b/lib/definitions/project.d.ts @@ -9,6 +9,7 @@ interface IProjectData { platformsDir: string; projectFilePath: string; projectId?: string; + dependencies: any; } interface IProjectDataService { diff --git a/lib/project-data.ts b/lib/project-data.ts index d9895201d4..e0696062d9 100644 --- a/lib/project-data.ts +++ b/lib/project-data.ts @@ -12,6 +12,7 @@ export class ProjectData implements IProjectData { public projectFilePath: string; public projectId: string; public projectName: string; + public dependencies: any; constructor(private $fs: IFileSystem, private $errors: IErrors, @@ -31,8 +32,9 @@ export class ProjectData implements IProjectData { let data: any = null; if (this.$fs.exists(this.projectFilePath).wait()) { + let fileContent: any = null; try { - let fileContent = this.$fs.readJson(this.projectFilePath).wait(); + fileContent = this.$fs.readJson(this.projectFilePath).wait(); data = fileContent[this.$staticConfig.CLIENT_NAME_KEY_IN_PROJECT_FILE]; } catch (err) { this.$errors.fail({formatStr: "The project file %s is corrupted." + os.EOL + @@ -44,6 +46,7 @@ export class ProjectData implements IProjectData { if(data) { this.projectId = data.id; + this.dependencies = fileContent.dependencies; } else { // This is the case when we have package.json file but nativescipt key is not presented in it this.tryToUpgradeProject().wait(); } diff --git a/lib/services/platform-service.ts b/lib/services/platform-service.ts index 258801bc53..132830fb51 100644 --- a/lib/services/platform-service.ts +++ b/lib/services/platform-service.ts @@ -157,20 +157,22 @@ export class PlatformService implements IPlatformService { let contents = this.$fs.readDirectory(appDestinationDirectoryPath).wait(); _(contents) - .filter(directoryName => directoryName !== "tns_modules") + .filter(directoryName => directoryName !== constants.TNS_MODULES_FOLDER_NAME) .each(directoryName => this.$fs.deleteDirectory(path.join(appDestinationDirectoryPath, directoryName)).wait()) .value(); // Copy all files from app dir, but make sure to exclude tns_modules let sourceFiles = this.$fs.readDirectory(appSourceDirectoryPath).wait(); - if(_.contains(sourceFiles, "tns_modules")) { - this.$logger.warn("You have tns_modules dir in your app folder. It will not be used and you can safely remove it."); + let hasTnsModulesInAppFolder = _.contains(sourceFiles, constants.TNS_MODULES_FOLDER_NAME); + if(hasTnsModulesInAppFolder && this.$projectData.dependencies && this.$projectData.dependencies[constants.TNS_CORE_MODULES_NAME]) { + this.$logger.warn("You have tns_modules dir in your app folder and tns-core-modules in your package.json file. Tns_modules dir in your app folder will not be used and you can safely remove it."); + sourceFiles.filter(source => source !== constants.TNS_MODULES_FOLDER_NAME) + .map(source => path.join(appSourceDirectoryPath, source)) + .forEach(source => shell.cp("-Rf", source, appDestinationDirectoryPath)); + } else { + shell.cp("-Rf", path.join(appSourceDirectoryPath, "*"), appDestinationDirectoryPath); } - sourceFiles.filter(source => source !== "tns_modules") - .map(source => path.join(appSourceDirectoryPath, source)) - .forEach(source => shell.cp("-Rf", source, appDestinationDirectoryPath)); - // Copy App_Resources to project root folder this.$fs.ensureDirectoryExists(platformData.platformProjectService.getAppResourcesDestinationDirectoryPath().wait()).wait(); // Should be deleted let appResourcesDirectoryPath = path.join(appDestinationDirectoryPath, constants.APP_RESOURCES_FOLDER_NAME); diff --git a/test/stubs.ts b/test/stubs.ts index 70545e8233..bdc85d5212 100644 --- a/test/stubs.ts +++ b/test/stubs.ts @@ -236,6 +236,7 @@ export class ProjectDataStub implements IProjectData { } projectFilePath: string; projectId: string; + dependencies: any; } export class PlatformsDataStub implements IPlatformsData {