From 14894ca9cf31aaf51d90f62295475205ee6d7e7e Mon Sep 17 00:00:00 2001 From: Daphne Maddox Date: Thu, 26 Mar 2015 12:07:58 -0700 Subject: [PATCH] js: install improvements - set flag in .npmrc so that optional deps aren't installed - preinstall script allows node ~0.10.20 - postinstall script exits early on failure, maintains color-coding Closes #608 --- .npmrc | 1 + shared/js/dev-tasks/postinstall.js | 120 +++++++++++++++++++++++------ shared/js/dev-tasks/preinstall.js | 4 +- 3 files changed, 100 insertions(+), 25 deletions(-) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..6ad0abd2 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +optional = false diff --git a/shared/js/dev-tasks/postinstall.js b/shared/js/dev-tasks/postinstall.js index 9a2e253e..097f3f5b 100644 --- a/shared/js/dev-tasks/postinstall.js +++ b/shared/js/dev-tasks/postinstall.js @@ -15,36 +15,110 @@ // console.log('...done.'); // } +// run bower install in browser dir +// TODO: get phantomjs e2e working +// +// var selVer = '2.43.1'; +// var pconfig = require('protractor/config.json'); +// +// if (pconfig.webdriverVersions.selenium !== selVer) { +// console.log( +// 'Configuring protractor to use Selenium Server version ' + +// selVer + ' for PhantomJS support...' +// ); +// pconfig.webdriverVersions.selenium = selVer; +// require('fs').writeFileSync( +// 'node_modules/protractor/config.json', JSON.stringify(pconfig) +// ); +// console.log('...done.'); +// } + // run bower install in browser dir var path = require('path'); -var del = require('del'); -var shelljs = require('shelljs'); -var chalk = require('chalk'); - -console.log(chalk.green('Samplestack: fetching browser run-time dependencies')); -del( - 'browser/bower_components', - {}, - function (err) { - if (err) { - console.log('Unable to clear browser\'s bower_components directory.'); - return process.exit(1); - } +var cp = require('child_process'); + +// first run an install of npm, specifying no optional deps +// then install bower components +// then clean up files which may remain from earlier Samplestack versions + +// don't try to use these until a successful install has happened +var chalk; +var del; - shelljs.cd('browser'); - shelljs.exec( - 'node ' + path.normalize('../node_modules/bower/bin/bower') + ' install' - ); - shelljs.cd('..'); +var rootDir = path.resolve(__dirname, '../../..'); - console.log(chalk.green('Samplestack: cleaning up unused directories')); - del([ +// // run npm install in the root dir, specifyin no optional deps +// // exit on fail, otherwise call back +// var doInst = function (cb) { +// var instProc = cp.spawn( +// 'npm', +// ['install', '--no-optional'], +// { stdio: 'inherit', cwd: rootDir } +// ); +// instProc.on('exit', function (err) { +// if (err) { +// return process.exit(err); +// } +// cb(); +// }); +// }; + +// clean up bower_components, run bower install from browser dir +// exit on fail, otherwise call back +var doBower = function (cb) { + chalk = require('chalk'); + del = require('del'); + console.log( + chalk.green('Samplestack: fetching browser run-time dependencies') + ); + del( + 'browser/bower_components', + { cwd: rootDir }, + function (err) { + if (err) { + console.log('Unable to clear browser\'s bower_components directory.'); + return process.exit(err); + } + var bowerProc = cp.spawn( + 'node', + [path.resolve(rootDir, 'node_modules/bower/bin/bower'), 'install'], + { stdio: 'inherit', cwd: path.join( rootDir, 'browser') } + ); + + bowerProc.on('exit', function (err) { + if (err) { + return process.exit(err); + } + cb(); + }); + } + ); +}; + +// clean up old directories, exit on fail, otherwise optionally call back +var doCleanup = function (cb) { + chalk = require('chalk'); + del = require('del'); + console.log(chalk.green('Samplestack: cleaning up unused directories')); + del( + [ 'browser/dev-tasks', 'browser/node_modules', 'appserver/node-express/node_modules', 'browser/npm-debug.log', 'appserver/node-express/npm-debug.log' - ]); - } -); + ], + { cwd: rootDir }, + function (err) { + if (err) { + return process.exit(err); + } + if (cb) { + cb(); + } + } + ); +}; + +doBower(doCleanup); diff --git a/shared/js/dev-tasks/preinstall.js b/shared/js/dev-tasks/preinstall.js index c5b4d085..401efe5d 100644 --- a/shared/js/dev-tasks/preinstall.js +++ b/shared/js/dev-tasks/preinstall.js @@ -8,10 +8,10 @@ var version = function () { var v = version(); -if (v.minor !== 10 || v.revision < 24) { +if (v.minor !== 10 || v.revision < 20) { process.stderr.write( 'Unsupported Node.js version (' + process.version + ').\n\n' + - 'Please install a recent release of Node.js 0.10.x' + 'Please install a recent release of Node.js 0.10.x ()' ); process.exit(1); }