Skip to content

Commit 07f204a

Browse files
authored
Merge pull request #2346 from NativeScript/plamen5kov/fix_issue_#2301
delete all unnecessary keys from app/package.json
2 parents cdf43bd + 853c94c commit 07f204a

File tree

3 files changed

+44
-17
lines changed

3 files changed

+44
-17
lines changed

.vscode/launch.json

+15-9
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,23 @@
77
{
88
"type": "node",
99
"request": "launch",
10-
"name": "Launch Program (Node 6+)",
11-
"program": "${workspaceRoot}/lib/nativescript-cli.js",
12-
"cwd": "${workspaceRoot}",
10+
"cwd": "${workspaceRoot}/scratch",
1311
"sourceMaps": true,
14-
// define the arguments that you would like to pass to CLI, for example
15-
// "args": [ "build", "android", "--justlaunch" ]
16-
"args": [
12+
"name": "Launch CLI (Node 6+)",
13+
"program": "${workspaceRoot}/lib/nativescript-cli.js",
1714

18-
]
15+
// example commands
16+
"args": [ "create", "cliapp"]
17+
// "args": [ "platform", "add", "[email protected]", "--path", "cliapp"]
18+
// "args": [ "platform", "remove", "android", "--path", "cliapp"]
19+
// "args": [ "plugin", "add", "nativescript-barcodescanner", "--path", "cliapp"]
20+
// "args": [ "plugin", "remove", "nativescript-barcodescanner", "--path", "cliapp"]
21+
// "args": [ "build", "android", "--path", "cliapp"]
22+
// "args": [ "run", "android", "--path", "cliapp"]
23+
// "args": [ "debug", "android", "--path", "cliapp"]
24+
// "args": [ "livesync", "android", "--path", "cliapp"]
25+
// "args": [ "livesync", "android", "--watch", "--path", "cliapp"]
1926
},
20-
2127
{
2228
// in case you want to debug a single test, modify it's code to be `it.only(...` instead of `it(...`
2329
"type": "node",
@@ -34,7 +40,7 @@
3440
"--harmony"
3541
],
3642
"request": "launch",
37-
"name": "Launch Program (Node 4, Node 5)",
43+
"name": "Launch CLI (Node 4, Node 5)",
3844
"program": "${workspaceRoot}/lib/nativescript-cli.js",
3945
"cwd": "${workspaceRoot}",
4046
"sourceMaps": true,

lib/constants.ts

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ export class PackageVersion {
2121
static LATEST = "latest";
2222
}
2323

24+
export let PackageJsonKeysToKeep : Array<String> = ["name", "main", "android", "version"];
25+
2426
export class SaveOptions {
2527
static PRODUCTION = "save";
2628
static DEV = "save-dev";

lib/services/project-service.ts

+27-8
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,9 @@ export class ProjectService implements IProjectService {
7676
try {
7777
//TODO: plamen5kov: move copy of template and npm uninstall in prepareTemplate logic
7878
this.createProjectCore(projectDir, appPath, projectId).wait();
79-
this.mergeProjectAndTemplateProperties(projectDir, appPath); //merging dependencies from template (dev && prod)
79+
let templatePackageJsonData = this.getDataFromJson(appPath);
80+
this.mergeProjectAndTemplateProperties(projectDir, templatePackageJsonData); //merging dependencies from template (dev && prod)
81+
this.removeMergedDependencies(projectDir, templatePackageJsonData);
8082
this.$npm.install(projectDir, projectDir, { "ignore-scripts": this.$options.ignoreScripts }).wait();
8183
selectedTemplate = selectedTemplate || "";
8284
let templateName = (constants.RESERVED_TEMPLATE_NAMES[selectedTemplate.toLowerCase()] || selectedTemplate/*user template*/) || constants.RESERVED_TEMPLATE_NAMES["default"];
@@ -93,26 +95,43 @@ export class ProjectService implements IProjectService {
9395
}).future<void>()();
9496
}
9597

96-
private mergeProjectAndTemplateProperties(projectDir: string, templatePath: string): void {
98+
private getDataFromJson(templatePath: string): any {
9799
let templatePackageJsonPath = path.join(templatePath, constants.PACKAGE_JSON_FILE_NAME);
100+
if(this.$fs.exists(templatePackageJsonPath)) {
101+
let templatePackageJsonData = this.$fs.readJson(templatePackageJsonPath);
102+
return templatePackageJsonData;
103+
} else {
104+
this.$logger.trace(`Template ${templatePath} does not have ${constants.PACKAGE_JSON_FILE_NAME} file.`);
105+
}
106+
return null;
107+
}
108+
109+
private removeMergedDependencies(projectDir: string, templatePackageJsonData: any) : void {
110+
let extractedTemplatePackageJsonPath = path.join(projectDir, constants.APP_FOLDER_NAME, constants.PACKAGE_JSON_FILE_NAME);
111+
for(let key in templatePackageJsonData) {
112+
if(constants.PackageJsonKeysToKeep.indexOf(key) === -1) {
113+
delete templatePackageJsonData[key];
114+
}
115+
}
116+
117+
this.$logger.trace("Deleting unnecessary information from template json.");
118+
this.$fs.writeJson(extractedTemplatePackageJsonPath, templatePackageJsonData);
119+
}
98120

99-
if (this.$fs.exists(templatePackageJsonPath)) {
121+
private mergeProjectAndTemplateProperties(projectDir: string, templatePackageJsonData: any): void {
122+
if(templatePackageJsonData) {
100123
let projectPackageJsonPath = path.join(projectDir, constants.PACKAGE_JSON_FILE_NAME);
101124
let projectPackageJsonData = this.$fs.readJson(projectPackageJsonPath);
102125
this.$logger.trace("Initial project package.json data: ", projectPackageJsonData);
103-
let templatePackageJsonData = this.$fs.readJson(templatePackageJsonPath);
104-
if (projectPackageJsonData.dependencies || templatePackageJsonData.dependencies) {
126+
if(projectPackageJsonData.dependencies || templatePackageJsonData.dependencies) {
105127
projectPackageJsonData.dependencies = this.mergeDependencies(projectPackageJsonData.dependencies, templatePackageJsonData.dependencies);
106128
}
107129

108130
if (projectPackageJsonData.devDependencies || templatePackageJsonData.devDependencies) {
109131
projectPackageJsonData.devDependencies = this.mergeDependencies(projectPackageJsonData.devDependencies, templatePackageJsonData.devDependencies);
110132
}
111-
112133
this.$logger.trace("New project package.json data: ", projectPackageJsonData);
113134
this.$fs.writeJson(projectPackageJsonPath, projectPackageJsonData);
114-
} else {
115-
this.$logger.trace(`Template ${templatePath} does not have ${constants.PACKAGE_JSON_FILE_NAME} file.`);
116135
}
117136
}
118137

0 commit comments

Comments
 (0)