mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-03 12:36:02 +01:00
109
app.js
109
app.js
@@ -23,13 +23,12 @@
|
||||
var nconf = require('nconf');
|
||||
nconf.argv().env('__');
|
||||
|
||||
var url = require('url'),
|
||||
async = require('async'),
|
||||
winston = require('winston'),
|
||||
colors = require('colors'),
|
||||
path = require('path'),
|
||||
pkg = require('./package.json'),
|
||||
file = require('./src/file');
|
||||
var url = require('url');
|
||||
var async = require('async');
|
||||
var winston = require('winston');
|
||||
var path = require('path');
|
||||
var pkg = require('./package.json');
|
||||
var file = require('./src/file');
|
||||
|
||||
global.env = process.env.NODE_ENV || 'production';
|
||||
|
||||
@@ -80,7 +79,7 @@ if (nconf.get('setup') || nconf.get('install')) {
|
||||
} else if (nconf.get('plugins')) {
|
||||
listPlugins();
|
||||
} else if (nconf.get('build')) {
|
||||
build(nconf.get('build'));
|
||||
require('./build').build(nconf.get('build'));
|
||||
} else {
|
||||
start();
|
||||
}
|
||||
@@ -159,7 +158,7 @@ function start() {
|
||||
return;
|
||||
}
|
||||
var meta = require('./src/meta');
|
||||
var emitter = require('./src/emitter');
|
||||
|
||||
switch (message.action) {
|
||||
case 'reload':
|
||||
meta.reload();
|
||||
@@ -239,6 +238,7 @@ function setup() {
|
||||
winston.info('NodeBB Setup Triggered via Command Line');
|
||||
|
||||
var install = require('./src/install');
|
||||
var build = require('./build');
|
||||
|
||||
process.stdout.write('\nWelcome to NodeBB!\n');
|
||||
process.stdout.write('\nThis looks like a new installation, so you\'ll have to answer a few questions about your environment before we can proceed.\n');
|
||||
@@ -247,7 +247,7 @@ function setup() {
|
||||
async.series([
|
||||
async.apply(install.setup),
|
||||
async.apply(loadConfig),
|
||||
async.apply(build, true)
|
||||
async.apply(build.build, true)
|
||||
], function (err, data) {
|
||||
// Disregard build step data
|
||||
data = data[0];
|
||||
@@ -280,100 +280,19 @@ function setup() {
|
||||
|
||||
process.exit();
|
||||
});
|
||||
};
|
||||
|
||||
function build(targets, callback) {
|
||||
var db = require('./src/database');
|
||||
var meta = require('./src/meta');
|
||||
var plugins = require('./src/plugins');
|
||||
var valid = ['js', 'clientCSS', 'acpCSS', 'tpl'];
|
||||
var step = function (target, next) {
|
||||
winston.info('[build] => Completed in ' + ((Date.now() - startTime) / 1000) + 's');
|
||||
next();
|
||||
};
|
||||
var startTime;
|
||||
|
||||
targets = (targets === true ? valid : targets.split(',').filter(function (target) {
|
||||
return valid.indexOf(target) !== -1;
|
||||
}));
|
||||
|
||||
if (!targets) {
|
||||
winston.error('[build] No valid build targets found. Aborting.');
|
||||
return process.exit(0);
|
||||
}
|
||||
|
||||
async.series([
|
||||
async.apply(db.init),
|
||||
async.apply(meta.themes.setupPaths),
|
||||
async.apply(plugins.init, null, null)
|
||||
], function (err) {
|
||||
if (err) {
|
||||
winston.error('[build] Encountered error preparing for build: ' + err.message);
|
||||
return process.exit(1);
|
||||
}
|
||||
|
||||
// eachSeries because it potentially(tm) runs faster on Windows this way
|
||||
async.eachSeries(targets, function (target, next) {
|
||||
switch(target) {
|
||||
case 'js':
|
||||
winston.info('[build] Building javascript');
|
||||
startTime = Date.now();
|
||||
async.series([
|
||||
async.apply(meta.js.minify, 'nodebb.min.js'),
|
||||
async.apply(meta.js.minify, 'acp.min.js')
|
||||
], step.bind(this, target, next));
|
||||
break;
|
||||
|
||||
case 'clientCSS':
|
||||
winston.info('[build] Building client-side CSS');
|
||||
startTime = Date.now();
|
||||
meta.css.minify('stylesheet.css', step.bind(this, target, next));
|
||||
break;
|
||||
|
||||
case 'acpCSS':
|
||||
winston.info('[build] Building admin control panel CSS');
|
||||
startTime = Date.now();
|
||||
meta.css.minify('admin.css', step.bind(this, target, next));
|
||||
break;
|
||||
|
||||
case 'tpl':
|
||||
winston.info('[build] Building templates');
|
||||
startTime = Date.now();
|
||||
meta.templates.compile(step.bind(this, target, next));
|
||||
break;
|
||||
|
||||
default:
|
||||
winston.warn('[build] Unknown build target: \'' + target + '\'');
|
||||
setImmediate(next);
|
||||
break;
|
||||
}
|
||||
}, function (err) {
|
||||
if (err) {
|
||||
winston.error('[build] Encountered error during build step: ' + err.message);
|
||||
return process.exit(1);
|
||||
}
|
||||
|
||||
winston.info('[build] Asset compilation successful.');
|
||||
|
||||
if (typeof callback === 'function') {
|
||||
callback();
|
||||
} else {
|
||||
process.exit(0);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
function upgrade() {
|
||||
var db = require('./src/database');
|
||||
var meta = require('./src/meta');
|
||||
var upgrade = require('./src/upgrade');
|
||||
var build = require('./build');
|
||||
|
||||
async.series([
|
||||
async.apply(db.init),
|
||||
async.apply(meta.configs.init),
|
||||
async.apply(upgrade.upgrade),
|
||||
async.apply(build, true)
|
||||
async.apply(build.build, true)
|
||||
], function (err) {
|
||||
if (err) {
|
||||
winston.error(err.stack);
|
||||
@@ -382,7 +301,7 @@ function upgrade() {
|
||||
process.exit(0);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
function activate() {
|
||||
var db = require('./src/database');
|
||||
|
||||
91
build.js
Normal file
91
build.js
Normal file
@@ -0,0 +1,91 @@
|
||||
'use strict';
|
||||
|
||||
var async = require('async');
|
||||
var winston = require('winston');
|
||||
|
||||
exports.build = function build(targets, callback) {
|
||||
var db = require('./src/database');
|
||||
var meta = require('./src/meta');
|
||||
var plugins = require('./src/plugins');
|
||||
var valid = ['js', 'clientCSS', 'acpCSS', 'tpl'];
|
||||
|
||||
targets = (targets === true ? valid : targets.split(',').filter(function (target) {
|
||||
return valid.indexOf(target) !== -1;
|
||||
}));
|
||||
|
||||
if (!targets) {
|
||||
winston.error('[build] No valid build targets found. Aborting.');
|
||||
return process.exit(0);
|
||||
}
|
||||
|
||||
async.series([
|
||||
async.apply(db.init),
|
||||
async.apply(meta.themes.setupPaths),
|
||||
async.apply(plugins.init, null, null)
|
||||
], function (err) {
|
||||
if (err) {
|
||||
winston.error('[build] Encountered error preparing for build: ' + err.message);
|
||||
return process.exit(1);
|
||||
}
|
||||
|
||||
exports.buildTargets(targets, callback);
|
||||
});
|
||||
};
|
||||
|
||||
exports.buildTargets = function (targets, callback) {
|
||||
var meta = require('./src/meta');
|
||||
var startTime;
|
||||
var step = function (target, next) {
|
||||
winston.info('[build] => Completed in ' + ((Date.now() - startTime) / 1000) + 's');
|
||||
next();
|
||||
};
|
||||
// eachSeries because it potentially(tm) runs faster on Windows this way
|
||||
async.eachSeries(targets, function (target, next) {
|
||||
switch(target) {
|
||||
case 'js':
|
||||
winston.info('[build] Building javascript');
|
||||
startTime = Date.now();
|
||||
async.series([
|
||||
async.apply(meta.js.minify, 'nodebb.min.js'),
|
||||
async.apply(meta.js.minify, 'acp.min.js')
|
||||
], step.bind(this, target, next));
|
||||
break;
|
||||
|
||||
case 'clientCSS':
|
||||
winston.info('[build] Building client-side CSS');
|
||||
startTime = Date.now();
|
||||
meta.css.minify('stylesheet.css', step.bind(this, target, next));
|
||||
break;
|
||||
|
||||
case 'acpCSS':
|
||||
winston.info('[build] Building admin control panel CSS');
|
||||
startTime = Date.now();
|
||||
meta.css.minify('admin.css', step.bind(this, target, next));
|
||||
break;
|
||||
|
||||
case 'tpl':
|
||||
winston.info('[build] Building templates');
|
||||
startTime = Date.now();
|
||||
meta.templates.compile(step.bind(this, target, next));
|
||||
break;
|
||||
|
||||
default:
|
||||
winston.warn('[build] Unknown build target: \'' + target + '\'');
|
||||
setImmediate(next);
|
||||
break;
|
||||
}
|
||||
}, function (err) {
|
||||
if (err) {
|
||||
winston.error('[build] Encountered error during build step: ' + err.message);
|
||||
return process.exit(1);
|
||||
}
|
||||
|
||||
winston.info('[build] Asset compilation successful.');
|
||||
|
||||
if (typeof callback === 'function') {
|
||||
callback();
|
||||
} else {
|
||||
process.exit(0);
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -553,7 +553,6 @@ describe('Controllers', function () {
|
||||
assert.ifError(err);
|
||||
assert.equal(res.statusCode, 200);
|
||||
assert.equal(body, 'OK');
|
||||
console.log(err, res.statusCode, body);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -126,9 +126,13 @@
|
||||
nconf.set('upload_url', nconf.get('upload_path').replace(/^\/public/, ''));
|
||||
|
||||
nconf.set('core_templates_path', path.join(__dirname, '../../src/views'));
|
||||
nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-vanilla/templates'));
|
||||
nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-persona/templates'));
|
||||
nconf.set('theme_templates_path', meta.config['theme:templates'] ? path.join(nconf.get('themes_path'), meta.config['theme:id'], meta.config['theme:templates']) : nconf.get('base_templates_path'));
|
||||
nconf.set('theme_config', path.join(nconf.get('themes_path'), 'nodebb-theme-persona', 'theme.json'));
|
||||
|
||||
require('../../build').buildTargets(['js', 'clientCSS', 'acpCSS', 'tpl'], next);
|
||||
},
|
||||
function (next) {
|
||||
var webserver = require('../../src/webserver');
|
||||
var sockets = require('../../src/socket.io');
|
||||
sockets.init(webserver.server);
|
||||
|
||||
Reference in New Issue
Block a user