From 73f375252f3e9f36d16e9f675290aa8e24a98a39 Mon Sep 17 00:00:00 2001 From: Peter Jaszkowiak Date: Tue, 9 May 2017 22:04:59 -0600 Subject: [PATCH] Automatically install dependencies --- nodebb | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/nodebb b/nodebb index 22051bb810..50bcc65fee 100755 --- a/nodebb +++ b/nodebb @@ -2,36 +2,34 @@ 'use strict'; -var cproc; -var args; -var fs; -var path; -var request; -var semver; -var prompt; -var async; +var fs = require('fs'); +var path = require('path'); +var cproc = require('child_process'); +// check to make sure dependencies are installed try { - require('colors'); - cproc = require('child_process'); - args = require('minimist')(process.argv.slice(2)); - fs = require('fs'); - path = require('path'); - request = require('request'); - semver = require('semver'); - prompt = require('prompt'); - async = require('async'); + fs.readFileSync(path.join(__dirname, 'node_modules/async/package.json')); } catch (e) { - if (e.code === 'MODULE_NOT_FOUND') { - process.stdout.write('NodeBB could not be started because it\'s dependencies have not been installed.\n'); - process.stdout.write('Please ensure that you have executed "npm install --production" prior to running NodeBB.\n\n'); - process.stdout.write('For more information, please see: https://docs.nodebb.org/en/latest/installing/os.html\n\n'); - process.stdout.write('Could not start: ' + e.code + '\n'); + if (e.code === 'ENOENT') { + process.stdout.write('Dependencies not yet installed.\n'); + process.stdout.write('Installing them now...\n\n'); - process.exit(1); + cproc.execSync('npm i --production', { + cwd: __dirname, + stdio: [0, 1, 2], + }); + } else { + throw e; } } +require('colors'); +var args = require('minimist')(process.argv.slice(2)); +var request = require('request'); +var semver = require('semver'); +var prompt = require('prompt'); +var async = require('async'); + var loaderPath = path.join(__dirname, 'loader.js'); var appPath = path.join(__dirname, 'app.js');