mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 03:55:55 +01:00
optimising build step for #5211
This commit is contained in:
10
build.js
10
build.js
@@ -3,7 +3,11 @@
|
|||||||
var async = require('async');
|
var async = require('async');
|
||||||
var winston = require('winston');
|
var winston = require('winston');
|
||||||
|
|
||||||
|
var buildStart;
|
||||||
|
|
||||||
exports.build = function build(targets, callback) {
|
exports.build = function build(targets, callback) {
|
||||||
|
buildStart = Date.now();
|
||||||
|
|
||||||
var db = require('./src/database');
|
var db = require('./src/database');
|
||||||
var meta = require('./src/meta');
|
var meta = require('./src/meta');
|
||||||
var plugins = require('./src/plugins');
|
var plugins = require('./src/plugins');
|
||||||
@@ -21,7 +25,7 @@ exports.build = function build(targets, callback) {
|
|||||||
async.series([
|
async.series([
|
||||||
async.apply(db.init),
|
async.apply(db.init),
|
||||||
async.apply(meta.themes.setupPaths),
|
async.apply(meta.themes.setupPaths),
|
||||||
async.apply(plugins.init, null, null)
|
async.apply(plugins.prepareForBuild)
|
||||||
], function (err) {
|
], function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
winston.error('[build] Encountered error preparing for build: ' + err.message);
|
winston.error('[build] Encountered error preparing for build: ' + err.message);
|
||||||
@@ -80,7 +84,9 @@ exports.buildTargets = function (targets, callback) {
|
|||||||
return process.exit(1);
|
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') {
|
if (typeof callback === 'function') {
|
||||||
callback();
|
callback();
|
||||||
|
|||||||
@@ -99,23 +99,9 @@ var middleware;
|
|||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
function (next) {
|
async.apply(Plugins.getPluginPaths),
|
||||||
db.getSortedSetRange('plugins:active', 0, -1, next);
|
function(paths, next) {
|
||||||
},
|
async.eachSeries(paths, Plugins.loadPlugin, 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);
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
function (next) {
|
function (next) {
|
||||||
// If some plugins are incompatible, throw the warning here
|
// If some plugins are incompatible, throw the warning here
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
var db = require('../database');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var semver = require('semver');
|
var semver = require('semver');
|
||||||
@@ -14,6 +15,49 @@ var meta = require('../meta');
|
|||||||
|
|
||||||
|
|
||||||
module.exports = function (Plugins) {
|
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.loadPlugin = function (pluginPath, callback) {
|
||||||
Plugins.loadPluginInfo(pluginPath, function (err, pluginData) {
|
Plugins.loadPluginInfo(pluginPath, function (err, pluginData) {
|
||||||
|
|||||||
Reference in New Issue
Block a user