From ba44db5b5b6450c49226a18d1304c4e0de45b1e8 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 7 Apr 2016 10:47:13 -0400 Subject: [PATCH] updated dependency check logic to better handle missing dependencies --- app.js | 4 ++++ src/meta/dependencies.js | 20 +++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/app.js b/app.js index ed5238285e..fa8964fb35 100644 --- a/app.js +++ b/app.js @@ -207,6 +207,10 @@ function start() { winston.warn('One or more of NodeBB\'s dependent packages are out-of-date. Please run the following command to update them:'); winston.warn(' ./nodebb upgrade'); break; + case 'dependencies-missing': + winston.warn('One or more of NodeBB\'s dependent packages are missing. Please run the following command to update them:'); + winston.warn(' ./nodebb upgrade'); + break; default: if (err.stacktrace !== false) { winston.error(err.stack); diff --git a/src/meta/dependencies.js b/src/meta/dependencies.js index 5482ad3e7f..7da86113cf 100644 --- a/src/meta/dependencies.js +++ b/src/meta/dependencies.js @@ -12,7 +12,9 @@ module.exports = function(Meta) { Meta.dependencies = {}; Meta.dependencies.check = function(callback) { - var modules = Object.keys(pkg.dependencies); + var modules = Object.keys(pkg.dependencies), + depsOutdated = false, + depsMissing = false; winston.verbose('Checking dependencies for outdated modules'); async.every(modules, function(module, next) { @@ -33,15 +35,23 @@ module.exports = function(Meta) { next(true); } else { process.stdout.write('[' + 'outdated'.yellow + '] ' + module.bold + ' installed v' + pkgData.version + ', package.json requires ' + pkg.dependencies[module] + '\n'); - next(false); + depsOutdated = true; + next(true); } } catch(e) { - winston.error('[meta/dependencies] Could not read: ' + module); - process.exit(); + process.stdout.write('[' + 'missing'.red + '] ' + module.bold + ' is a required dependency but could not be found\n'); + depsMissing = true; + next(true); } }); }, function(ok) { - callback(!ok && global.env !== 'development' ? new Error('dependencies-out-of-date') : null); + if (depsMissing) { + callback(new Error('dependencies-missing')); + } else if (depsOutdated) { + callback(global.env !== 'development' ? new Error('dependencies-out-of-date') : null); + } else { + callback(null); + } }); }; };