General purpose task for building external modules
This commit is contained in:
@@ -30,6 +30,7 @@
|
||||
"htmlparser2": "3.7.3",
|
||||
"jsdoc": "3.3.0-alpha9",
|
||||
"nomnom": "1.8.0",
|
||||
"rbush": "1.3.4",
|
||||
"temp": "0.8.1",
|
||||
"walk": "2.3.4"
|
||||
},
|
||||
@@ -43,5 +44,8 @@
|
||||
"phantomjs": "1.9.10",
|
||||
"proj4": "2.3.3",
|
||||
"sinon": "1.10.3"
|
||||
}
|
||||
},
|
||||
"ext": [
|
||||
"rbush"
|
||||
]
|
||||
}
|
||||
|
||||
84
tasks/build-ext.js
Normal file
84
tasks/build-ext.js
Normal 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);
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user