optimising build step for #5211

v1.18.x
Julian Lam 8 years ago
parent 5e47ea5996
commit 6acbd3ea21

@ -3,7 +3,11 @@
var async = require('async');
var winston = require('winston');
var buildStart;
exports.build = function build(targets, callback) {
buildStart = Date.now();
var db = require('./src/database');
var meta = require('./src/meta');
var plugins = require('./src/plugins');
@ -21,7 +25,7 @@ exports.build = function build(targets, callback) {
async.series([
async.apply(db.init),
async.apply(meta.themes.setupPaths),
async.apply(plugins.init, null, null)
async.apply(plugins.prepareForBuild)
], function (err) {
if (err) {
winston.error('[build] Encountered error preparing for build: ' + err.message);
@ -80,7 +84,9 @@ exports.buildTargets = function (targets, callback) {
return process.exit(1);
}
winston.info('[build] Asset compilation successful.');
var time = (Date.now() - buildStart) / 1000;
winston.info('[build] Asset compilation successful. Completed in ' + time + 's.');
if (typeof callback === 'function') {
callback();

@ -99,23 +99,9 @@ var middleware;
next();
});
},
function (next) {
db.getSortedSetRange('plugins:active', 0, -1, next);
},
function (plugins, next) {
if (!Array.isArray(plugins)) {
return next();
}
plugins = plugins.filter(function (plugin) {
return plugin && typeof plugin === 'string';
}).map(function (plugin) {
return path.join(__dirname, '../node_modules/', plugin);
});
async.filter(plugins, file.exists, function (plugins) {
async.eachSeries(plugins, Plugins.loadPlugin, next);
});
async.apply(Plugins.getPluginPaths),
function(paths, next) {
async.eachSeries(paths, Plugins.loadPlugin, next);
},
function (next) {
// If some plugins are incompatible, throw the warning here

@ -1,5 +1,6 @@
'use strict';
var db = require('../database');
var fs = require('fs');
var path = require('path');
var semver = require('semver');
@ -14,6 +15,49 @@ var meta = require('../meta');
module.exports = function (Plugins) {
Plugins.getPluginPaths = function (callback) {
async.waterfall([
function (next) {
db.getSortedSetRange('plugins:active', 0, -1, next);
},
function (plugins, next) {
if (!Array.isArray(plugins)) {
return next();
}
plugins = plugins.filter(function (plugin) {
return plugin && typeof plugin === 'string';
}).map(function (plugin) {
return path.join(__dirname, '../../node_modules/', plugin);
});
async.filter(plugins, file.exists, function (plugins) {
next(null, plugins);
});
},
], callback);
};
Plugins.prepareForBuild = function (callback) {
async.waterfall([
async.apply(Plugins.getPluginPaths),
function(paths, next) {
async.map(paths, function(path, next) {
Plugins.loadPluginInfo(path, next);
}, next);
},
function(plugins, next) {
async.each(plugins, function(pluginData, next) {
var idx = plugins.indexOf(pluginData);
async.parallel([
async.apply(mapFiles, pluginData, 'css', 'cssFiles'),
async.apply(mapFiles, pluginData, 'less', 'lessFiles'),
async.apply(mapClientSideScripts, pluginData)
], next);
}, next);
}
], callback);
};
Plugins.loadPlugin = function (pluginPath, callback) {
Plugins.loadPluginInfo(pluginPath, function (err, pluginData) {

Loading…
Cancel
Save