From ffe3cee944e4fc711fe0723f8e8f8bcb4c2df2ff Mon Sep 17 00:00:00 2001 From: Vladimir Kotikov Date: Tue, 18 Aug 2015 13:43:05 +0300 Subject: [PATCH 1/2] CB-9505 Correct plugin modules loading within browserify flow --- cordova-lib/src/plugman/prepare-browserify.js | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/cordova-lib/src/plugman/prepare-browserify.js b/cordova-lib/src/plugman/prepare-browserify.js index 8b218cb8a..39d44acd2 100644 --- a/cordova-lib/src/plugman/prepare-browserify.js +++ b/cordova-lib/src/plugman/prepare-browserify.js @@ -146,7 +146,6 @@ module.exports = function handlePrepare(project_dir, platform, plugins_dir, www_ var pluginMetadata = {}; var modulesMetadata = []; - var bundleFiles = []; var cordova_plugins = ''; var plugins = Object.keys(platformJson.root.installed_plugins).concat(Object.keys(platformJson.root.dependent_plugins)); @@ -167,22 +166,20 @@ module.exports = function handlePrepare(project_dir, platform, plugins_dir, www_ .forEach(function(jsModule) { var moduleName = jsModule.name ? jsModule.name : path.basename(jsModule.src, '.js'); var moduleId = pluginInfo.id + '.' + moduleName; + var moduleMetadata = {file: jsModule.src, id: moduleId, name: moduleName}; - modulesMetadata.push({file: jsModule.src, id: moduleId, name: moduleName}); - libraryRelease.require([{file: path.join(pluginDir, jsModule.src), expose: moduleId}]); - - jsModule.clobbers.forEach(function(child) { - if (child.target) cordova_plugins += - 'require(\'cordova/modulemapper\').clobbers(\'' + - moduleId + '\', \'' + child.target + '\');\n'; - }); - jsModule.merges.forEach(function(child) { - if (child.target) cordova_plugins += - 'require(\'cordova/modulemapper\').merges(\'' + - moduleId + '\', \'' + child.target + '\');\n'; - }); - if (jsModule.runs) - cordova_plugins += 'require(\'' + moduleId + '\');\n'; + if (jsModule.clobbers.length > 0) { + moduleMetadata.clobbers = jsModule.clobbers.map(function(o) { return o.target; }); + } + if (jsModule.merges.length > 0) { + moduleMetadata.merges = jsModule.merges.map(function(o) { return o.target; }); + } + if (jsModule.runs) { + moduleMetadata.runs = true; + } + + modulesMetadata.push(moduleMetadata); + libraryRelease.require(path.join(pluginDir, jsModule.src), { expose: moduleId }); }); }); From fe517618c44c1c856b728dfb584c83efb9515235 Mon Sep 17 00:00:00 2001 From: Vladimir Kotikov Date: Mon, 24 Aug 2015 14:20:42 +0300 Subject: [PATCH 2/2] CB-9549 Removes excess JS files from browserified app --- cordova-lib/src/cordova/prepare.js | 20 +++++++++---- cordova-lib/src/plugman/prepare-browserify.js | 30 +++++++++++-------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/cordova-lib/src/cordova/prepare.js b/cordova-lib/src/cordova/prepare.js index 797200bb9..9e278331b 100644 --- a/cordova-lib/src/cordova/prepare.js +++ b/cordova-lib/src/cordova/prepare.js @@ -106,27 +106,35 @@ function prepare(options) { if (options.browserify) { plugman.prepare = require('../plugman/prepare-browserify'); } - - return plugman.prepare(platformPath, platform, plugins_dir, null, true, pluginInfoProvider).then(function () { + + return plugman.prepare(platformPath, platform, plugins_dir, null, true, pluginInfoProvider) + .then(function () { + // Remove cordova-js-src from application www directory + // otherwise it will be included into resultant app bundle + var cordovaJsSrcPath = path.join(platformPath, 'www/cordova-js-src'); + if(fs.existsSync(cordovaJsSrcPath)) { + shell.rm('-rf', cordovaJsSrcPath); + } + }).then(function () { // Make sure that config changes for each existing plugin is in place var platformJson = PlatformJson.load(plugins_dir, platform); var munger = new PlatformMunger(platform, platformPath, plugins_dir, platformJson, pluginInfoProvider); munger.reapply_global_munge(); munger.save_all(); - + // Update platform config.xml based on top level config.xml var cfg = new ConfigParser(xml); var platform_cfg = new ConfigParser(parser.config_xml()); exports._mergeXml(cfg.doc.getroot(), platform_cfg.doc.getroot(), platform, true); - + // CB-6976 Windows Universal Apps. For smooth transition and to prevent mass api failures // we allow using windows8 tag for new windows platform if (platform == 'windows') { exports._mergeXml(cfg.doc.getroot(), platform_cfg.doc.getroot(), 'windows8', true); } - + platform_cfg.write(); - + return parser.update_project(cfg); }); })).then(function() { diff --git a/cordova-lib/src/plugman/prepare-browserify.js b/cordova-lib/src/plugman/prepare-browserify.js index 39d44acd2..2dfb26aba 100644 --- a/cordova-lib/src/plugman/prepare-browserify.js +++ b/cordova-lib/src/plugman/prepare-browserify.js @@ -33,7 +33,8 @@ var platform_modules = require('../platforms/platforms'), bundle = require('cordova-js/tasks/lib/bundle-browserify'), writeLicenseHeader = require('cordova-js/tasks/lib/write-license-header'), Q = require('q'), - computeCommitId = require('cordova-js/tasks/lib/compute-commit-id'); + computeCommitId = require('cordova-js/tasks/lib/compute-commit-id'), + Readable = require('stream').Readable; var PlatformJson = require('./util/PlatformJson'); var PluginInfoProvider = require('../PluginInfoProvider'); @@ -146,7 +147,6 @@ module.exports = function handlePrepare(project_dir, platform, plugins_dir, www_ var pluginMetadata = {}; var modulesMetadata = []; - var cordova_plugins = ''; var plugins = Object.keys(platformJson.root.installed_plugins).concat(Object.keys(platformJson.root.dependent_plugins)); events.emit('verbose', 'Iterating over installed plugins:', plugins); @@ -183,24 +183,30 @@ module.exports = function handlePrepare(project_dir, platform, plugins_dir, www_ }); }); - cordova_plugins += 'module.exports.metadata = \n' + - JSON.stringify(pluginMetadata, null, 4) + ';\n' + - 'module.exports = \n' + - JSON.stringify(modulesMetadata, null, 4) + ';\n'; - events.emit('verbose', 'Writing out cordova_plugins.js...'); - fs.writeFileSync(path.join(wwwDir, 'cordova_plugins.js'), cordova_plugins, 'utf8'); - libraryRelease.add(path.join(wwwDir, 'cordova_plugins.js'), {expose: 'cordova/plugin_list'}); - fs.writeFileSync(path.join(wwwDir, 'init.js'), 'require(\'cordova/init\');\n', 'utf8'); - libraryRelease.add(path.resolve(wwwDir, 'init.js')); + // Create a stream and write plugin metadata into it + // instead of generating intermediate file on FS + var cordova_plugins = new Readable(); + cordova_plugins.push( + 'module.exports.metadata = ' + JSON.stringify(pluginMetadata, null, 4) + ';\n' + + 'module.exports = ' + JSON.stringify(modulesMetadata, null, 4) + ';\n', 'utf8'); + cordova_plugins.push(null); + + var bootstrap = new Readable(); + bootstrap.push('require(\'cordova/init\');\n', 'utf8'); + bootstrap.push(null); var moduleAliases = modulesMetadata .reduce(function (accum, meta) { accum['./' + meta.name] = meta.id; return accum; }, {}); - libraryRelease.transform(aliasify, {aliases: moduleAliases, verbose: true}); + + libraryRelease + .add(cordova_plugins, {file: path.join(wwwDir, 'cordova_plugins.js'), expose: 'cordova/plugin_list'}) + .add(bootstrap) + .transform(aliasify, {aliases: moduleAliases}); var outReleaseFile = path.join(wwwDir, 'cordova.js'); return generateFinalBundle(platform, libraryRelease, outReleaseFile, commitId, platformVersion);