mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-15 02:54:11 +08:00
92 lines
2.4 KiB
JavaScript
92 lines
2.4 KiB
JavaScript
const { spawn } = require("child_process");
|
|
const { resolve: pathResolve } = require("path");
|
|
|
|
const {
|
|
getPackageJson,
|
|
getProjectDir,
|
|
writePackageJson,
|
|
} = require("../helpers/projectHelpers");
|
|
const { forceUpdateProjectFiles } = require("../helpers/projectFilesManager");
|
|
const { forceUpdateProjectDeps } = require("../helpers/dependencyManager");
|
|
|
|
const PLUGIN_NAME = "@nativescript/webpack";
|
|
const PROJECT_DIR = getProjectDir();
|
|
|
|
function update({
|
|
deps: shouldUpdateDeps,
|
|
configs: shouldUpdateConfigs,
|
|
projectDir = PROJECT_DIR
|
|
} = {}) {
|
|
|
|
const commands = [];
|
|
|
|
if (shouldUpdateDeps) {
|
|
commands.push(() => updateDeps(projectDir));
|
|
}
|
|
|
|
if (shouldUpdateConfigs) {
|
|
commands.push(() => Promise.resolve(updateConfigs(projectDir)));
|
|
}
|
|
|
|
return commands.reduce((current, next) => current.then(next), Promise.resolve());
|
|
}
|
|
|
|
function updateDeps(projectDir) {
|
|
console.info("Updating dev dependencies...");
|
|
|
|
return new Promise((resolve, reject) => {
|
|
const packageJson = getPackageJson(projectDir);
|
|
const { deps } = forceUpdateProjectDeps(packageJson);
|
|
packageJson.devDependencies = deps;
|
|
writePackageJson(packageJson, projectDir);
|
|
|
|
const command = `npm install --ignore-scripts`;
|
|
execute(command).then(resolve).catch(reject);
|
|
});
|
|
}
|
|
|
|
function updateConfigs(projectDir) {
|
|
console.info("Updating configuration files...");
|
|
forceUpdateProjectFiles(projectDir);
|
|
}
|
|
|
|
function execute(command) {
|
|
return new Promise((resolve, reject) => {
|
|
const args = command.split(" ");
|
|
spawnChildProcess(...args)
|
|
.then(resolve)
|
|
.catch(throwError)
|
|
});
|
|
}
|
|
|
|
function spawnChildProcess(command, ...args) {
|
|
return new Promise((resolve, reject) => {
|
|
const escapedArgs = args.map(a => `"${a}"`);
|
|
|
|
const childProcess = spawn(command, escapedArgs, {
|
|
stdio: "inherit",
|
|
cwd: PROJECT_DIR,
|
|
shell: true,
|
|
});
|
|
|
|
childProcess.on("close", code => {
|
|
if (code === 0) {
|
|
resolve();
|
|
} else {
|
|
reject({
|
|
code,
|
|
message: `child process exited with code ${code}`,
|
|
});
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function throwError(error) {
|
|
console.error(error.message);
|
|
process.exit(error.code || 1);
|
|
}
|
|
|
|
module.exports = update;
|
|
|