From 921fd3ed3b586fb8ca8cd9bb68f19929bbf7a9ee Mon Sep 17 00:00:00 2001 From: tsauerwein Date: Mon, 30 Mar 2015 08:31:18 +0200 Subject: [PATCH] Support generic ext. modules with browserify --- package.json | 3 ++- tasks/build-ext.js | 54 ++++++++++++++++++++++++++++++++++------------ 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index b3ad9bb5b2..089ff3624e 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "rbush": "1.3.5", "temp": "0.8.1", "walk": "2.3.4", - "wrench": "1.5.8" + "wrench": "1.5.8", + "browserify": "9.0.3" }, "devDependencies": { "clean-css": "2.2.16", diff --git a/tasks/build-ext.js b/tasks/build-ext.js index d7b4ae9f2e..120a32ed27 100644 --- a/tasks/build-ext.js +++ b/tasks/build-ext.js @@ -3,6 +3,7 @@ var path = require('path'); var async = require('async'); var fse = require('fs-extra'); +var browserify = require('browserify'); var pkg = require('../package.json'); @@ -15,11 +16,22 @@ var buildDir = path.join(root, 'build', 'ol.ext'); * @return {Array.} Array of objects representing external modules. */ function getExternalModules() { - return pkg.ext.map(function(name) { - return { - name: name, - main: require.resolve(name) - }; + return pkg.ext.map(function(item) { + if (typeof item === 'string') { + return { + 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. */ 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' + + var wrap = function(code) { + return 'goog.provide(\'ol.ext.' + mod.name + '\');\n' + '/** @typedef {function(*)} */\n' + 'ol.ext.' + mod.name + ';\n' + '(function() {\n' + @@ -50,11 +58,29 @@ function wrapModule(mod, callback) { 'fileoverviewTags, missingProperties, nonStandardJsDocs, ' + 'strictModuleDepCheck, suspiciousCode, undefinedNames, ' + 'undefinedVars, unknownDefines, uselessCode, visibility}\n' + - ' */\n' + data.toString() + '\n' + + ' */\n' + code + '\n' + 'ol.ext.' + mod.name + ' = module.exports;\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())); + }); + } }