From b8712a7d18359a806e9334dc0df66ea07ef63ffa Mon Sep 17 00:00:00 2001 From: plamen5kov Date: Tue, 13 Dec 2016 10:42:05 +0200 Subject: [PATCH 1/2] delete all unnecessary keys from app/package.json --- .vscode/launch.json | 24 ++++++++----- lib/constants.ts | 2 ++ lib/services/project-service.ts | 61 +++++++++++++++++++++++---------- 3 files changed, 60 insertions(+), 27 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 1e31432536..a361c5e51d 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -7,17 +7,23 @@ { "type": "node", "request": "launch", - "name": "Launch Program (Node 6+)", - "program": "${workspaceRoot}/lib/nativescript-cli.js", - "cwd": "${workspaceRoot}", + "cwd": "${workspaceRoot}/scratch", "sourceMaps": true, - // define the arguments that you would like to pass to CLI, for example - // "args": [ "build", "android", "--justlaunch" ] - "args": [ + "name": "Launch CLI (Node 6+)", + "program": "${workspaceRoot}/lib/nativescript-cli.js", - ] + // example commands + "args": [ "create", "cliapp"] + // "args": [ "platform", "add", "android@1.3.0", "--path", "cliapp"] + // "args": [ "platform", "remove", "android", "--path", "cliapp"] + // "args": [ "plugin", "add", "nativescript-barcodescanner", "--path", "cliapp"] + // "args": [ "plugin", "remove", "nativescript-barcodescanner", "--path", "cliapp"] + // "args": [ "build", "android", "--path", "cliapp"] + // "args": [ "run", "android", "--path", "cliapp"] + // "args": [ "debug", "android", "--path", "cliapp"] + // "args": [ "livesync", "android", "--path", "cliapp"] + // "args": [ "livesync", "android", "--watch", "--path", "cliapp"] }, - { // in case you want to debug a single test, modify it's code to be `it.only(...` instead of `it(...` "type": "node", @@ -34,7 +40,7 @@ "--harmony" ], "request": "launch", - "name": "Launch Program (Node 4, Node 5)", + "name": "Launch CLI (Node 4, Node 5)", "program": "${workspaceRoot}/lib/nativescript-cli.js", "cwd": "${workspaceRoot}", "sourceMaps": true, diff --git a/lib/constants.ts b/lib/constants.ts index db1657fbfd..c2780f07cc 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -21,6 +21,8 @@ export class PackageVersion { static LATEST = "latest"; } +export let PackageJsonKeysToKeep : Array = ["name", "main", "android", "version"]; + export class SaveOptions { static PRODUCTION = "save"; static DEV = "save-dev"; diff --git a/lib/services/project-service.ts b/lib/services/project-service.ts index 2681a31915..3ed10751bd 100644 --- a/lib/services/project-service.ts +++ b/lib/services/project-service.ts @@ -76,7 +76,9 @@ export class ProjectService implements IProjectService { try { //TODO: plamen5kov: move copy of template and npm uninstall in prepareTemplate logic this.createProjectCore(projectDir, appPath, projectId).wait(); - this.mergeProjectAndTemplateProperties(projectDir, appPath); //merging dependencies from template (dev && prod) + let templatePackageJsonData = this.getDataFromJson(appPath).wait(); + this.mergeProjectAndTemplateProperties(projectDir, templatePackageJsonData).wait(); //merging dependencies from template (dev && prod) + this.removeMergedDependencies(projectDir, templatePackageJsonData).wait(); this.$npm.install(projectDir, projectDir, { "ignore-scripts": this.$options.ignoreScripts }).wait(); selectedTemplate = selectedTemplate || ""; let templateName = (constants.RESERVED_TEMPLATE_NAMES[selectedTemplate.toLowerCase()] || selectedTemplate/*user template*/) || constants.RESERVED_TEMPLATE_NAMES["default"]; @@ -93,27 +95,50 @@ export class ProjectService implements IProjectService { }).future()(); } - private mergeProjectAndTemplateProperties(projectDir: string, templatePath: string): void { - let templatePackageJsonPath = path.join(templatePath, constants.PACKAGE_JSON_FILE_NAME); - - if (this.$fs.exists(templatePackageJsonPath)) { - let projectPackageJsonPath = path.join(projectDir, constants.PACKAGE_JSON_FILE_NAME); - let projectPackageJsonData = this.$fs.readJson(projectPackageJsonPath); - this.$logger.trace("Initial project package.json data: ", projectPackageJsonData); - let templatePackageJsonData = this.$fs.readJson(templatePackageJsonPath); - if (projectPackageJsonData.dependencies || templatePackageJsonData.dependencies) { - projectPackageJsonData.dependencies = this.mergeDependencies(projectPackageJsonData.dependencies, templatePackageJsonData.dependencies); + private getDataFromJson(templatePath: string): IFuture { + return (() => { + let templatePackageJsonPath = path.join(templatePath, constants.PACKAGE_JSON_FILE_NAME); + if(this.$fs.exists(templatePackageJsonPath)) { + let templatePackageJsonData = this.$fs.readJson(templatePackageJsonPath).wait(); + return templatePackageJsonData; + } else { + this.$logger.trace(`Template ${templatePath} does not have ${constants.PACKAGE_JSON_FILE_NAME} file.`); } + return null; + }).future()(); + } - if (projectPackageJsonData.devDependencies || templatePackageJsonData.devDependencies) { - projectPackageJsonData.devDependencies = this.mergeDependencies(projectPackageJsonData.devDependencies, templatePackageJsonData.devDependencies); + private removeMergedDependencies(projectDir: string, templatePackageJsonData: any) : IFuture { + return (() => { + let extractedTemplatePackageJsonPath = path.join(projectDir, constants.APP_FOLDER_NAME, constants.PACKAGE_JSON_FILE_NAME); + for(let key in templatePackageJsonData) { + if(constants.PackageJsonKeysToKeep.indexOf(key) === -1) { + delete templatePackageJsonData[key]; + } } - this.$logger.trace("New project package.json data: ", projectPackageJsonData); - this.$fs.writeJson(projectPackageJsonPath, projectPackageJsonData); - } else { - this.$logger.trace(`Template ${templatePath} does not have ${constants.PACKAGE_JSON_FILE_NAME} file.`); - } + this.$logger.trace("Deleting unnecessary information from template json."); + this.$fs.writeJson(extractedTemplatePackageJsonPath, templatePackageJsonData); + }).future()(); + } + + private mergeProjectAndTemplateProperties(projectDir: string, templatePackageJsonData: any): IFuture { + return (() => { + if(templatePackageJsonData) { + let projectPackageJsonPath = path.join(projectDir, constants.PACKAGE_JSON_FILE_NAME); + let projectPackageJsonData = this.$fs.readJson(projectPackageJsonPath).wait(); + this.$logger.trace("Initial project package.json data: ", projectPackageJsonData); + if(projectPackageJsonData.dependencies || templatePackageJsonData.dependencies) { + projectPackageJsonData.dependencies = this.mergeDependencies(projectPackageJsonData.dependencies, templatePackageJsonData.dependencies); + } + + if (projectPackageJsonData.devDependencies || templatePackageJsonData.devDependencies) { + projectPackageJsonData.devDependencies = this.mergeDependencies(projectPackageJsonData.devDependencies, templatePackageJsonData.devDependencies); + } + this.$logger.trace("New project package.json data: ", projectPackageJsonData); + this.$fs.writeJson(projectPackageJsonPath, projectPackageJsonData); + } + }).future()(); } private mergeDependencies(projectDependencies: IStringDictionary, templateDependencies: IStringDictionary): IStringDictionary { From 853c94c7c433e4456927b156533d904a0e360dd4 Mon Sep 17 00:00:00 2001 From: plamen5kov Date: Tue, 20 Dec 2016 11:49:24 +0200 Subject: [PATCH 2/2] removed wrapping in futures where it's not necessary --- lib/services/project-service.ts | 72 +++++++++++++++------------------ 1 file changed, 33 insertions(+), 39 deletions(-) diff --git a/lib/services/project-service.ts b/lib/services/project-service.ts index 3ed10751bd..62f109f966 100644 --- a/lib/services/project-service.ts +++ b/lib/services/project-service.ts @@ -76,9 +76,9 @@ export class ProjectService implements IProjectService { try { //TODO: plamen5kov: move copy of template and npm uninstall in prepareTemplate logic this.createProjectCore(projectDir, appPath, projectId).wait(); - let templatePackageJsonData = this.getDataFromJson(appPath).wait(); - this.mergeProjectAndTemplateProperties(projectDir, templatePackageJsonData).wait(); //merging dependencies from template (dev && prod) - this.removeMergedDependencies(projectDir, templatePackageJsonData).wait(); + let templatePackageJsonData = this.getDataFromJson(appPath); + this.mergeProjectAndTemplateProperties(projectDir, templatePackageJsonData); //merging dependencies from template (dev && prod) + this.removeMergedDependencies(projectDir, templatePackageJsonData); this.$npm.install(projectDir, projectDir, { "ignore-scripts": this.$options.ignoreScripts }).wait(); selectedTemplate = selectedTemplate || ""; let templateName = (constants.RESERVED_TEMPLATE_NAMES[selectedTemplate.toLowerCase()] || selectedTemplate/*user template*/) || constants.RESERVED_TEMPLATE_NAMES["default"]; @@ -95,50 +95,44 @@ export class ProjectService implements IProjectService { }).future()(); } - private getDataFromJson(templatePath: string): IFuture { - return (() => { - let templatePackageJsonPath = path.join(templatePath, constants.PACKAGE_JSON_FILE_NAME); - if(this.$fs.exists(templatePackageJsonPath)) { - let templatePackageJsonData = this.$fs.readJson(templatePackageJsonPath).wait(); - return templatePackageJsonData; - } else { - this.$logger.trace(`Template ${templatePath} does not have ${constants.PACKAGE_JSON_FILE_NAME} file.`); - } - return null; - }).future()(); + private getDataFromJson(templatePath: string): any { + let templatePackageJsonPath = path.join(templatePath, constants.PACKAGE_JSON_FILE_NAME); + if(this.$fs.exists(templatePackageJsonPath)) { + let templatePackageJsonData = this.$fs.readJson(templatePackageJsonPath); + return templatePackageJsonData; + } else { + this.$logger.trace(`Template ${templatePath} does not have ${constants.PACKAGE_JSON_FILE_NAME} file.`); + } + return null; } - private removeMergedDependencies(projectDir: string, templatePackageJsonData: any) : IFuture { - return (() => { - let extractedTemplatePackageJsonPath = path.join(projectDir, constants.APP_FOLDER_NAME, constants.PACKAGE_JSON_FILE_NAME); - for(let key in templatePackageJsonData) { - if(constants.PackageJsonKeysToKeep.indexOf(key) === -1) { - delete templatePackageJsonData[key]; - } + private removeMergedDependencies(projectDir: string, templatePackageJsonData: any) : void { + let extractedTemplatePackageJsonPath = path.join(projectDir, constants.APP_FOLDER_NAME, constants.PACKAGE_JSON_FILE_NAME); + for(let key in templatePackageJsonData) { + if(constants.PackageJsonKeysToKeep.indexOf(key) === -1) { + delete templatePackageJsonData[key]; } + } - this.$logger.trace("Deleting unnecessary information from template json."); - this.$fs.writeJson(extractedTemplatePackageJsonPath, templatePackageJsonData); - }).future()(); + this.$logger.trace("Deleting unnecessary information from template json."); + this.$fs.writeJson(extractedTemplatePackageJsonPath, templatePackageJsonData); } - private mergeProjectAndTemplateProperties(projectDir: string, templatePackageJsonData: any): IFuture { - return (() => { - if(templatePackageJsonData) { - let projectPackageJsonPath = path.join(projectDir, constants.PACKAGE_JSON_FILE_NAME); - let projectPackageJsonData = this.$fs.readJson(projectPackageJsonPath).wait(); - this.$logger.trace("Initial project package.json data: ", projectPackageJsonData); - if(projectPackageJsonData.dependencies || templatePackageJsonData.dependencies) { - projectPackageJsonData.dependencies = this.mergeDependencies(projectPackageJsonData.dependencies, templatePackageJsonData.dependencies); - } + private mergeProjectAndTemplateProperties(projectDir: string, templatePackageJsonData: any): void { + if(templatePackageJsonData) { + let projectPackageJsonPath = path.join(projectDir, constants.PACKAGE_JSON_FILE_NAME); + let projectPackageJsonData = this.$fs.readJson(projectPackageJsonPath); + this.$logger.trace("Initial project package.json data: ", projectPackageJsonData); + if(projectPackageJsonData.dependencies || templatePackageJsonData.dependencies) { + projectPackageJsonData.dependencies = this.mergeDependencies(projectPackageJsonData.dependencies, templatePackageJsonData.dependencies); + } - if (projectPackageJsonData.devDependencies || templatePackageJsonData.devDependencies) { - projectPackageJsonData.devDependencies = this.mergeDependencies(projectPackageJsonData.devDependencies, templatePackageJsonData.devDependencies); - } - this.$logger.trace("New project package.json data: ", projectPackageJsonData); - this.$fs.writeJson(projectPackageJsonPath, projectPackageJsonData); + if (projectPackageJsonData.devDependencies || templatePackageJsonData.devDependencies) { + projectPackageJsonData.devDependencies = this.mergeDependencies(projectPackageJsonData.devDependencies, templatePackageJsonData.devDependencies); } - }).future()(); + this.$logger.trace("New project package.json data: ", projectPackageJsonData); + this.$fs.writeJson(projectPackageJsonPath, projectPackageJsonData); + } } private mergeDependencies(projectDependencies: IStringDictionary, templateDependencies: IStringDictionary): IStringDictionary {