Support generic ext. modules with browserify

This commit is contained in:
tsauerwein
2015-03-30 08:31:18 +02:00
parent d678e9e9a3
commit 921fd3ed3b
2 changed files with 42 additions and 15 deletions

View File

@@ -40,7 +40,8 @@
"rbush": "1.3.5", "rbush": "1.3.5",
"temp": "0.8.1", "temp": "0.8.1",
"walk": "2.3.4", "walk": "2.3.4",
"wrench": "1.5.8" "wrench": "1.5.8",
"browserify": "9.0.3"
}, },
"devDependencies": { "devDependencies": {
"clean-css": "2.2.16", "clean-css": "2.2.16",

View File

@@ -3,6 +3,7 @@ var path = require('path');
var async = require('async'); var async = require('async');
var fse = require('fs-extra'); var fse = require('fs-extra');
var browserify = require('browserify');
var pkg = require('../package.json'); var pkg = require('../package.json');
@@ -15,11 +16,22 @@ var buildDir = path.join(root, 'build', 'ol.ext');
* @return {Array.<Object>} Array of objects representing external modules. * @return {Array.<Object>} Array of objects representing external modules.
*/ */
function getExternalModules() { function getExternalModules() {
return pkg.ext.map(function(name) { return pkg.ext.map(function(item) {
return { if (typeof item === 'string') {
name: name, return {
main: require.resolve(name) name: item,
}; module: item,
main: require.resolve(item),
browserify: false
};
} else {
return {
module: item.module,
name: item.name !== undefined ? item.name : item.module,
main: require.resolve(item.module),
browserify: item.browserify !== undefined ? item.browserify : false
};
}
}); });
} }
@@ -31,12 +43,8 @@ function getExternalModules() {
* wrapped module. * wrapped module.
*/ */
function wrapModule(mod, callback) { function wrapModule(mod, callback) {
fs.readFile(mod.main, function(err, data) { var wrap = function(code) {
if (err) { return 'goog.provide(\'ol.ext.' + mod.name + '\');\n' +
callback(err);
return;
}
var wrapped = 'goog.provide(\'ol.ext.' + mod.name + '\');\n' +
'/** @typedef {function(*)} */\n' + '/** @typedef {function(*)} */\n' +
'ol.ext.' + mod.name + ';\n' + 'ol.ext.' + mod.name + ';\n' +
'(function() {\n' + '(function() {\n' +
@@ -50,11 +58,29 @@ function wrapModule(mod, callback) {
'fileoverviewTags, missingProperties, nonStandardJsDocs, ' + 'fileoverviewTags, missingProperties, nonStandardJsDocs, ' +
'strictModuleDepCheck, suspiciousCode, undefinedNames, ' + 'strictModuleDepCheck, suspiciousCode, undefinedNames, ' +
'undefinedVars, unknownDefines, uselessCode, visibility}\n' + 'undefinedVars, unknownDefines, uselessCode, visibility}\n' +
' */\n' + data.toString() + '\n' + ' */\n' + code + '\n' +
'ol.ext.' + mod.name + ' = module.exports;\n' + 'ol.ext.' + mod.name + ' = module.exports;\n' +
'})();\n'; '})();\n';
callback(null, wrapped); };
});
if (mod.browserify) {
var b = browserify(mod.main, {standalone: mod.name}).
bundle(function(err, buf) {
if (err) {
callback(err);
return;
}
callback(null, wrap(buf.toString()));
});
} else {
fs.readFile(mod.main, function(err, data) {
if (err) {
callback(err);
return;
}
callback(null, wrap(data.toString()));
});
}
} }