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

Commit b367d34

Browse files
committed
refactor(update-ns-webpack): provide multiple options for updating the plugin (#297)
- update dependencies (--deps) - update npm scripts (--scripts) - update webpack configuration files (--configs)
1 parent 13d739d commit b367d34

File tree

4 files changed

+127
-3
lines changed

4 files changed

+127
-3
lines changed

Diff for: installer.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,12 @@ function uninstall() {
3232

3333
projectFilesManager.removeProjectFiles(PROJECT_DIR, APP_DIR);
3434

35-
console.log("Removing npm scripts...");
36-
npmScriptsManager.removeDeprecatedNpmScripts(packageJson);
37-
npmScriptsManager.removeNpmScripts(packageJson.scripts);
35+
const scripts = packageJson.scripts;
36+
if (scripts) {
37+
console.log("Removing npm scripts...");
38+
npmScriptsManager.removeDeprecatedNpmScripts(scripts);
39+
npmScriptsManager.removeNpmScripts(scripts);
40+
}
3841

3942
helpers.writePackageJson(packageJson, PROJECT_DIR);
4043

Diff for: npmScriptsManager.js

+8
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,16 @@ function removePlatformScripts(scripts, nameTemplate) {
5151
});
5252
}
5353

54+
function forceUpdateNpmScripts(scripts) {
55+
removeDeprecatedNpmScripts(scripts);
56+
removeNpmScripts(scripts);
57+
58+
addNpmScripts(scripts);
59+
}
60+
5461
module.exports = {
5562
addNpmScripts,
5663
removeDeprecatedNpmScripts,
5764
removeNpmScripts,
65+
forceUpdateNpmScripts,
5866
};

Diff for: projectFilesManager.js

+7
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ function removeProjectFiles(projectDir, appDir) {
5959
});
6060
}
6161

62+
function forceUpdateProjectFiles(projectDir, appDir) {
63+
removeProjectFiles(projectDir, appDir);
64+
addProjectFiles(projectDir, appDir);
65+
}
66+
6267
function deleteFile(destinationPath) {
6368
if (fs.existsSync(destinationPath)) {
6469
console.info(`Deleting file: ${destinationPath}`);
@@ -189,5 +194,7 @@ function tsOrJs(projectDir, name) {
189194
module.exports = {
190195
addProjectFiles,
191196
removeProjectFiles,
197+
forceUpdateProjectFiles,
192198
editExistingProjectFiles,
193199
};
200+

Diff for: verify/update.js

+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
const { spawn } = require("child_process");
2+
const { resolve: pathResolve } = require("path");
3+
4+
const { getPackageJson, getProjectDir, writePackageJson } = require("../projectHelpers");
5+
const { forceUpdateProjectFiles } = require("../projectFilesManager");
6+
const { forceUpdateProjectDeps } = require("../dependencyManager");
7+
const { forceUpdateNpmScripts } = require("../npmScriptsManager");
8+
9+
const PLUGIN_NAME = "nativescript-dev-webpack";
10+
const PROJECT_DIR = getProjectDir({ nestingLvl: 2 });
11+
12+
function update({
13+
deps: shouldUpdateDeps,
14+
scripts: shouldUpdateScripts,
15+
configs: shouldUpdateConfigs,
16+
projectDir = PROJECT_DIR
17+
} = {}) {
18+
19+
const commands = [];
20+
21+
if (shouldUpdateDeps) {
22+
commands.push(() => updateDeps(projectDir));
23+
}
24+
25+
if (shouldUpdateScripts) {
26+
commands.push(() => Promise.resolve(updateScripts(projectDir)));
27+
}
28+
29+
if (shouldUpdateConfigs) {
30+
commands.push(() => Promise.resolve(updateConfigs(projectDir)));
31+
}
32+
33+
return commands.reduce((current, next) => current.then(next), Promise.resolve());
34+
}
35+
36+
function updateScripts(projectDir) {
37+
console.info("Updating npm scripts...");
38+
39+
const packageJson = getPackageJson(projectDir);
40+
const scripts = packageJson.scripts || {};
41+
42+
forceUpdateNpmScripts(scripts);
43+
packageJson.scripts = scripts;
44+
writePackageJson(packageJson, projectDir);
45+
}
46+
47+
function updateDeps(projectDir) {
48+
console.info("Updating dev dependencies...");
49+
50+
return new Promise((resolve, reject) => {
51+
const packageJson = getPackageJson(projectDir);
52+
const { deps } = forceUpdateProjectDeps(packageJson);
53+
packageJson.devDependencies = deps;
54+
writePackageJson(packageJson, projectDir);
55+
56+
const command = `npm install --ignore-scripts`;
57+
execute(command).then(resolve).catch(reject);
58+
});
59+
}
60+
61+
function updateConfigs(projectDir) {
62+
console.info("Updating configuration files...");
63+
64+
const appDir = pathResolve(projectDir, "app");
65+
forceUpdateProjectFiles(projectDir, appDir);
66+
}
67+
68+
function execute(command) {
69+
return new Promise((resolve, reject) => {
70+
const args = command.split(" ");
71+
spawnChildProcess(...args)
72+
.then(resolve)
73+
.catch(throwError)
74+
});
75+
}
76+
77+
function spawnChildProcess(command, ...args) {
78+
return new Promise((resolve, reject) => {
79+
const escapedArgs = args.map(a => `"${a}"`);
80+
81+
const childProcess = spawn(command, escapedArgs, {
82+
stdio: "inherit",
83+
pwd: PROJECT_DIR,
84+
shell: true,
85+
});
86+
87+
childProcess.on("close", code => {
88+
if (code === 0) {
89+
resolve();
90+
} else {
91+
reject({
92+
code,
93+
message: `child process exited with code ${code}`,
94+
});
95+
}
96+
});
97+
});
98+
}
99+
100+
function throwError(error) {
101+
console.error(error.message);
102+
process.exit(error.code || 1);
103+
}
104+
105+
module.exports = update;
106+

0 commit comments

Comments
 (0)