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

feat(hooks): improve hooks handling #961

Merged
merged 3 commits into from
Jul 2, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions lib/before-checkForChanges.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
module.exports = function ($staticConfig, hookArgs) {
const majorVersionMatch = ($staticConfig.version || '').match(/^(\d+)\./);
const majorVersion = majorVersionMatch && majorVersionMatch[1] && +majorVersionMatch[1];
if (majorVersion && majorVersion < 6) {
// check if we are using the bundle workflow or the legacy one.
const isUsingBundleWorkflow = hookArgs &&
hookArgs.checkForChangesOpts &&
hookArgs.checkForChangesOpts.projectChangesOptions &&
hookArgs.checkForChangesOpts.projectChangesOptions.bundle;

if (isUsingBundleWorkflow) {
const packageJsonData = require("../package.json")
throw new Error(`The current version of ${packageJsonData.name} (${packageJsonData.version}) is not compatible with the used CLI: ${$staticConfig.version}. Please upgrade your NativeScript CLI version (npm i -g nativescript).`);
}
}
}
6 changes: 6 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@
"type": "after-prepare",
"script": "lib/after-prepare.js",
"inject": true
},
{
"type": "before-checkForChanges",
"script": "lib/before-checkForChanges.js",
"inject": true
}
]
},
Expand All @@ -24,6 +29,7 @@
},
"scripts": {
"postinstall": "node postinstall.js",
"preuninstall": "node preuninstall.js",
"postpack": "rm -rf node_modules",
"prepare": "tsc && npm run jasmine",
"test": "npm run prepare && npm run jasmine",
Expand Down
39 changes: 37 additions & 2 deletions postinstall.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,55 @@
"use strict";

const { dirname } = require("path");
const hook = require("nativescript-hook")(__dirname);

const { compareProjectFiles } = require("./projectFilesManager");
const { getProjectDir } = require("./projectHelpers");
const path = require("path");
const fs = require("fs");

const projectDir = getProjectDir();

// This method is introduced as in version 1.0.0 of nativescript-dev-webpack (compatible and required for NativeScript 6.0.0)
// we have changed a lot of hooks and old ones are incompatible. This should be automatically handled with preuninstall script of the old version.
// However, old versions of nativescript-dev-webpack do not have such logic, so remove them manually on postinstall of the current version.
// This logic can be removed later, once most of the projects are migrated to 1.0.0 of the package or later.
// These new versions have preuninstall script that will automatically handle this case.
function removeOldHooks() {
const oldHooks = [
"before-prepareJSApp",
"before-cleanApp",
"before-watch",
"after-watch",
"before-watchPatterns",
"before-shouldPrepare",
"after-prepare",
"before-preview-sync"
];

const hooksDir = path.join(projectDir, "hooks");
const pkgName = require("./package.json").name;
const filename = `${pkgName}.js`;
oldHooks.forEach(hookName => {
const hookPath = path.join(hooksDir, hookName, filename);

try {
if (fs.existsSync(hookPath)) {
fs.unlinkSync(hookPath);
}
} catch (err) {
console.warn(`${pkgName} postinstall task: unable to delete hook ${hookPath}. Error is: ${err}`);
}
});
}

if (projectDir) {
compareProjectFiles(projectDir);

removeOldHooks();
hook.postinstall();
const installer = require("./installer");
installer.install();
} else {
// We are installing dev dependencies for the nativescript-dev-webpack plugin.
console.log("Skipping postinstall artifacts! We assumed the nativescript-dev-webpack is installing devDependencies");
}

11 changes: 11 additions & 0 deletions preuninstall.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"use strict";

const hook = require("nativescript-hook")(__dirname);

const { getProjectDir } = require("./projectHelpers");

const projectDir = getProjectDir();

if (projectDir) {
hook.preuninstall();
}