General purpose task for building external modules

This commit is contained in:
Tim Schaub
2014-10-23 12:06:14 -06:00
parent 45967992fb
commit 01b64bc655
2 changed files with 89 additions and 1 deletions

View File

@@ -30,6 +30,7 @@
"htmlparser2": "3.7.3", "htmlparser2": "3.7.3",
"jsdoc": "3.3.0-alpha9", "jsdoc": "3.3.0-alpha9",
"nomnom": "1.8.0", "nomnom": "1.8.0",
"rbush": "1.3.4",
"temp": "0.8.1", "temp": "0.8.1",
"walk": "2.3.4" "walk": "2.3.4"
}, },
@@ -43,5 +44,8 @@
"phantomjs": "1.9.10", "phantomjs": "1.9.10",
"proj4": "2.3.3", "proj4": "2.3.3",
"sinon": "1.10.3" "sinon": "1.10.3"
} },
"ext": [
"rbush"
]
} }

84
tasks/build-ext.js Normal file
View File

@@ -0,0 +1,84 @@
var fs = require('fs');
var path = require('path');
var async = require('async');
var fse = require('fs-extra');
var pkg = require('../package.json');
var root = path.join(__dirname, '..');
var buildDir = path.join(root, 'build', 'ol.ext');
/**
* Get external module metadata.
* @return {Array.<Object>} Array of objects representing external modules.
*/
function getExternalModules() {
return pkg.ext.map(function(name) {
return {
name: name,
main: require.resolve(name)
};
});
}
/**
* Wrap a CommonJS module in Closure Library accessible code.
* @param {Object} mod Module metadata.
* @param {function(Error, string)} callback Called with any error and the
* wrapped module.
*/
function wrapModule(mod, callback) {
fs.readFile(mod.main, function(err, data) {
if (err) {
callback(err);
return;
}
var wrapped = 'goog.provide(\'ol.ext.' + mod.name + '\');\n' +
'(function() {\n' +
'var module = {};\n' +
'/**\n' +
' * @fileoverview\n' +
' * @suppress {accessControls, ambiguousFunctionDecl, ' +
'checkDebuggerStatement, checkRegExp, checkTypes, checkVars, const, ' +
'constantProperty, deprecated, duplicate, es5Strict, ' +
'fileoverviewTags, missingProperties, nonStandardJsDocs, ' +
'strictModuleDepCheck, suspiciousCode, undefinedNames, ' +
'undefinedVars, unknownDefines, uselessCode, visibility}\n' +
' */\n' + data.toString() + '\n' +
'ol.ext.' + mod.name + ' = module.exports;\n' +
'})();\n';
callback(null, wrapped);
});
}
/**
* Build external modules.
* @param {Array.<Object>} modules External modules.
* @param {function(Error)} callback Called with any error.
*/
function buildModules(modules, callback) {
async.each(modules, function(mod, done) {
var output = path.join(buildDir, mod.name) + '.js';
async.waterfall([
wrapModule.bind(null, mod),
fse.outputFile.bind(fse, output)
], done);
}, callback);
}
if (require.main === module) {
var modules = getExternalModules();
buildModules(modules, function(err) {
if (err) {
process.stderr.write(err.message + '\n');
process.exit(1);
} else {
process.exit(0);
}
});
}