Skip to content
This repository was archived by the owner on Aug 7, 2021. It is now read-only.

Commit e484d9e

Browse files
committed
Add an uninstaller script (triggered manually).
1 parent af81fd7 commit e484d9e

File tree

5 files changed

+151
-36
lines changed

5 files changed

+151
-36
lines changed

Diff for: bin/install-ns-webpack

+4
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
11
#!/usr/bin/env node
22
var installer = require("../installer");
3+
4+
installer.addProjectFiles();
5+
installer.addNpmScripts();
6+
installer.addProjectDependencies();

Diff for: bin/remove-ns-webpack

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/usr/bin/env node
2+
var installer = require("../installer");
3+
4+
installer.removeProjectFiles();
5+
installer.removeNpmScripts();
6+
installer.removeProjectDependencies();

Diff for: bin/remove-ns-webpack.cmd

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@node %~dp0\install-ns-webpack %*

Diff for: installer.js

+138-35
Original file line numberDiff line numberDiff line change
@@ -17,60 +17,135 @@ if (isAngular) {
1717
isTypeScript = true;
1818
}
1919

20-
function addProjectFiles() {
21-
copyProjectTemplate("webpack.android.js.template", "webpack.android.js");
22-
copyProjectTemplate("webpack.ios.js.template", "webpack.ios.js");
20+
function getProjectTemplates() {
21+
var templates = {
22+
"webpack.android.js.template": "webpack.android.js",
23+
"webpack.ios.js.template": "webpack.ios.js",
24+
};
2325

2426
if (isAngular) {
25-
copyProjectTemplate("webpack.common.js.angular.template", "webpack.common.js");
26-
copyProjectTemplate("tsconfig.aot.json.template", "tsconfig.aot.json");
27+
templates["webpack.common.js.angular.template"] = "webpack.common.js";
28+
templates["tsconfig.aot.json.template"] = "tsconfig.aot.json";
2729
} else {
28-
copyProjectTemplate("webpack.common.js.nativescript.template", "webpack.common.js");
30+
templates["webpack.common.js.nativescript.template"] = "webpack.common.js";
2931
}
32+
return templates;
33+
}
34+
35+
function getAppTemplates() {
36+
var templates = {
37+
"vendor-platform.android.ts.template": tsOrJs("vendor-platform.android"),
38+
"vendor-platform.ios.ts.template": tsOrJs("vendor-platform.ios"),
39+
};
3040

31-
copyAppTemplate("vendor-platform.android.ts.template", tsOrJs("vendor-platform.android"));
32-
copyAppTemplate("vendor-platform.ios.ts.template", tsOrJs("vendor-platform.ios"));
3341
if (isAngular) {
34-
copyAppTemplate("vendor.ts.angular.template", tsOrJs("vendor"));
42+
templates["vendor.ts.angular.template"] = tsOrJs("vendor");
3543
} else {
36-
copyAppTemplate("vendor.ts.nativescript.template", tsOrJs("vendor"));
44+
templates["vendor.ts.nativescript.template"] = tsOrJs("vendor");
3745
}
46+
return templates;
47+
}
48+
49+
function addProjectFiles() {
50+
var projectTemplates = getProjectTemplates();
51+
Object.keys(projectTemplates).forEach(function(templateName) {
52+
var templateDestination = projectTemplates[templateName];
53+
copyProjectTemplate(templateName, templateDestination);
54+
});
55+
56+
var appTemplates = getAppTemplates();
57+
Object.keys(appTemplates).forEach(function(templateName) {
58+
var templateDestination = appTemplates[templateName];
59+
copyAppTemplate(templateName, templateDestination);
60+
});
3861
}
3962
exports.addProjectFiles = addProjectFiles;
4063

64+
function removeProjectFiles() {
65+
var projectTemplates = getProjectTemplates();
66+
Object.keys(projectTemplates).forEach(function(templateName) {
67+
var templateDestination = projectTemplates[templateName];
68+
deleteProjectFile(templateDestination);
69+
});
70+
71+
var appTemplates = getAppTemplates();
72+
Object.keys(appTemplates).forEach(function(templateName) {
73+
var templateDestination = appTemplates[templateName];
74+
deleteAppFile(templateDestination);
75+
});
76+
}
77+
exports.removeProjectFiles = removeProjectFiles;
78+
79+
function getScriptTemplates() {
80+
return {
81+
"clean-[PLATFORM]": "tns clean-app [PLATFORM]",
82+
"prewebpack-[PLATFORM]": "npm run clean-[PLATFORM]",
83+
"webpack-[PLATFORM]": "webpack --config=webpack.[PLATFORM].js --progress",
84+
"prestart-[PLATFORM]-bundle": "npm run webpack-[PLATFORM]",
85+
"start-[PLATFORM]-bundle": "tns run [PLATFORM] --bundle --disable-npm-install",
86+
"prebuild-[PLATFORM]-bundle": "npm run webpack-[PLATFORM]",
87+
"build-[PLATFORM]-bundle": "tns build [PLATFORM] --bundle --disable-npm-install",
88+
};
89+
}
90+
4191
function addNpmScripts() {
42-
addPlatformScript(packageJson, "clean-[PLATFORM]", "tns clean-app [PLATFORM]");
43-
addPlatformScript(packageJson, "prewebpack-[PLATFORM]", "npm run clean-[PLATFORM]");
44-
addPlatformScript(packageJson, "webpack-[PLATFORM]", "webpack --config=webpack.[PLATFORM].js --progress");
45-
addPlatformScript(packageJson, "prestart-[PLATFORM]-bundle", "npm run webpack-[PLATFORM]");
46-
addPlatformScript(packageJson, "start-[PLATFORM]-bundle", "tns run [PLATFORM] --bundle --disable-npm-install");
47-
addPlatformScript(packageJson, "prebuild-[PLATFORM]-bundle", "npm run webpack-[PLATFORM]");
48-
addPlatformScript(packageJson, "build-[PLATFORM]-bundle", "tns build [PLATFORM] --bundle --disable-npm-install");
92+
var scriptTemplates = getScriptTemplates();
93+
Object.keys(scriptTemplates).forEach(function(templateName) {
94+
addPlatformScript(packageJson, templateName, scriptTemplates[templateName]);
95+
});
4996
}
5097
exports.addNpmScripts = addNpmScripts;
5198

99+
function removeNpmScripts() {
100+
var scriptTemplates = getScriptTemplates();
101+
Object.keys(scriptTemplates).forEach(function(templateName) {
102+
removePlatformScripts(packageJson, templateName);
103+
});
104+
}
105+
exports.removeNpmScripts = removeNpmScripts;
106+
107+
function getProjectDependencies() {
108+
var dependencies = {
109+
"webpack": "~2.1.0-beta.27",
110+
"webpack-sources": "~0.1.3",
111+
"copy-webpack-plugin": "~3.0.1",
112+
"raw-loader": "~0.5.1",
113+
"nativescript-css-loader": "~0.26.0",
114+
"resolve-url-loader": "~1.6.0",
115+
"extract-text-webpack-plugin": "~2.0.0-beta.4",
116+
};
117+
118+
if (isAngular) {
119+
dependencies["@angular/compiler-cli"] = "2.4.3";
120+
dependencies["@ngtools/webpack"] = "1.2.1";
121+
dependencies["typescript"] = "^2.0.10";
122+
dependencies["htmlparser2"] = "~3.9.2";
123+
} else {
124+
dependencies["awesome-typescript-loader"] = "~3.0.0-beta.9";
125+
}
126+
return dependencies;
127+
}
128+
52129
function addProjectDependencies() {
53130
configureDevDependencies(packageJson, function (add) {
54-
add("webpack", "~2.1.0-beta.27");
55-
add("webpack-sources", "~0.1.3");
56-
add("copy-webpack-plugin", "~3.0.1");
57-
add("raw-loader", "~0.5.1");
58-
add("nativescript-css-loader", "~0.26.0");
59-
add("resolve-url-loader", "~1.6.0");
60-
add("extract-text-webpack-plugin", "~2.0.0-beta.4");
61-
62-
if (isAngular) {
63-
add("@angular/compiler-cli", "2.4.3");
64-
add("@ngtools/webpack", "1.2.1");
65-
add("typescript", "^2.0.10");
66-
add("htmlparser2", "~3.9.2");
67-
} else {
68-
add("awesome-typescript-loader", "~3.0.0-beta.9");
69-
}
131+
var dependencies = getProjectDependencies();
132+
Object.keys(dependencies).forEach(function(dependencyName) {
133+
add(dependencyName, dependencies[dependencyName]);
134+
});
70135
});
71136
}
72137
exports.addProjectDependencies = addProjectDependencies;
73138

139+
function removeProjectDependencies() {
140+
configureDevDependencies(packageJson, function (add, remove) {
141+
var dependencies = getProjectDependencies();
142+
Object.keys(dependencies).forEach(function(dependencyName) {
143+
remove(dependencyName);
144+
});
145+
});
146+
}
147+
exports.removeProjectDependencies = removeProjectDependencies;
148+
74149

75150
function addPlatformScript(packageJson, nameTemplate, commandTemplate) {
76151
if (!packageJson.scripts) {
@@ -82,12 +157,25 @@ function addPlatformScript(packageJson, nameTemplate, commandTemplate) {
82157
var name = nameTemplate.replace(/\[PLATFORM\]/g, platform);
83158
var command = commandTemplate.replace(/\[PLATFORM\]/g, platform);
84159
if (!scripts[name]) {
85-
scripts[name] = command;
86160
console.log("Registering script: " + name);
161+
scripts[name] = command;
87162
}
88163
});
89164
}
90165

166+
function removePlatformScripts(packageJson, nameTemplate) {
167+
if (!packageJson.scripts) {
168+
return;
169+
}
170+
171+
var scripts = packageJson.scripts;
172+
["android", "ios"].forEach(function (platform) {
173+
var name = nameTemplate.replace(/\[PLATFORM\]/g, platform);
174+
console.log("Removing script: " + name);
175+
delete scripts[name];
176+
});
177+
}
178+
91179
function configureDevDependencies(packageJson, adderCallback) {
92180
var pendingNpmInstall = false;
93181
if (!packageJson.devDependencies) {
@@ -103,6 +191,9 @@ function configureDevDependencies(packageJson, adderCallback) {
103191
} else {
104192
console.info("Dev dependency: '" + name + "' already added. Leaving version: " + dependencies[name]);
105193
}
194+
}, function(name) {
195+
console.info("Removing dev dependency: " + name);
196+
delete dependencies[name];
106197
});
107198

108199
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
@@ -139,16 +230,28 @@ function copyProjectTemplate(templateName, projectPath) {
139230
copyTemplate(templateName, destinationPath);
140231
}
141232

233+
function deleteProjectFile(projectPath) {
234+
var destinationPath = path.join(projectDir, projectPath);
235+
console.log("Deleting file: " + destinationPath);
236+
fs.unlink(destinationPath);
237+
}
238+
142239
function copyAppTemplate(templateName, appPath) {
143240
var destinationPath = path.join(appDir, appPath);
144241
copyTemplate(templateName, destinationPath);
145242
}
146243

244+
function deleteAppFile(appPath) {
245+
var destinationPath = path.join(appDir, appPath);
246+
console.log("Deleting file: " + destinationPath);
247+
fs.unlink(destinationPath);
248+
}
249+
147250
function copyTemplate(templateName, destinationPath) {
148251
var templatePath = path.join(__dirname, templateName);
149252
// Create destination file, only if not present.
150253
if (!fs.existsSync(destinationPath)) {
151-
console.log("Creating: " + destinationPath);
254+
console.log("Creating file: " + destinationPath);
152255
var content = fs.readFileSync(templatePath, "utf8");
153256
fs.writeFileSync(destinationPath, content);
154257
}

Diff for: package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
"postinstall": "node postinstall.js"
1818
},
1919
"bin": {
20-
"install-ns-webpack": "./bin/install-ns-webpack"
20+
"install-ns-webpack": "./bin/install-ns-webpack",
21+
"remove-ns-webpack": "./bin/remove-ns-webpack"
2122
},
2223
"dependencies": {},
2324
"devDependencies": {}

0 commit comments

Comments
 (0)