12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- /**
- Hook is executed when plugin is added to the project.
- It will check all necessary module dependencies and install the missing ones locally.
- */
-
- var path = require('path');
- var fs = require('fs');
- var spawnSync = require('child_process').spawnSync;
- var pluginNpmDependencies = require('../package.json').dependencies;
- var INSTALLATION_FLAG_FILE_NAME = '.npmInstalled';
-
- // region mark that we installed npm packages
- /**
- * Check if we already executed this hook.
- *
- * @param {Object} ctx - cordova context
- * @return {Boolean} true if already executed; otherwise - false
- */
- function isInstallationAlreadyPerformed(ctx) {
- var pathToInstallFlag = path.join(ctx.opts.projectRoot, 'plugins', ctx.opts.plugin.id, INSTALLATION_FLAG_FILE_NAME);
- try {
- fs.accessSync(pathToInstallFlag, fs.F_OK);
- return true;
- } catch (err) {
- return false;
- }
- }
-
- /**
- * Create empty file - indicator, that we tried to install dependency modules after installation.
- * We have to do that, or this hook is gonna be called on any plugin installation.
- */
- function createPluginInstalledFlag(ctx) {
- var pathToInstallFlag = path.join(ctx.opts.projectRoot, 'plugins', ctx.opts.plugin.id, INSTALLATION_FLAG_FILE_NAME);
-
- fs.closeSync(fs.openSync(pathToInstallFlag, 'w'));
- }
- // endregion
-
- module.exports = function(ctx) {
- if (isInstallationAlreadyPerformed(ctx)) {
- return;
- }
-
- console.log('Installing dependency packages: ');
- console.log(JSON.stringify(pluginNpmDependencies, null, 2));
-
- var npm = (process.platform === "win32" ? "npm.cmd" : "npm");
- var result = spawnSync(npm, ['install', '--production'], { cwd: './plugins/' + ctx.opts.plugin.id });
- if (result.error) {
- throw result.error;
- }
-
- createPluginInstalledFlag(ctx);
- };
|