Ticket #2696: build.2.patch

File build.2.patch, 6.9 kB (added by guest, 16 months ago)

Minimalist dojo build + WTI integration?

  • dojo/_base/_loader/bootstrap.js

     
    214214        // NOTE: platform specializations need to implement this 
    215215} 
    216216 
     217// Implementation of Web Toolkit interface 
     218if(typeof window.wti == "undefined") { 
     219        var wti = dojo; 
     220        wti.require = dojo.require; 
     221        wti.provide = dojo.provide; 
     222} 
    217223// vim:ai:ts=4:noet:textwidth=80 
  • util/buildscripts/build.js

     
    270270} 
    271271//********* End release ********* 
    272272 
     273//********* Start Minimal ********* 
     274function minimal(){ 
     275        logger.info("Using profile: " + kwArgs.profileFile); 
     276        logger.info("Using version number: " + kwArgs.version + " for the release."); 
     277         
     278        clean(); 
     279 
     280        var dependencies = kwArgs.profileProperties.dependencies; 
     281        var prefixes = dependencies.prefixes; 
     282        var lineSeparator = fileUtil.getLineSeparator(); 
     283        var copyrightText = fileUtil.readFile("copyright.txt"); 
     284        var buildNoticeText = fileUtil.readFile("build_notice.txt"); 
     285         
     286        //Find the dojo prefix path. Need it to process other module prefixes. 
     287        var dojoPrefixPath = buildUtil.getDojoPrefixPath(prefixes) + '/'; 
     288 
     289        logger.trace("Building dojo.js and layer files"); 
     290        var result = buildUtil.makeDojoJs(buildUtil.loadDependencyList(kwArgs.profileProperties), kwArgs.version); 
     291 
     292        //Save the build layers. The first layer is dojo.js. 
     293        var layerLegalText = copyrightText + buildNoticeText; 
     294        var dojoReleaseDir = kwArgs.releaseDir + "/dojo/"; 
     295         
     296        var optimizeIgnoreString = ""; 
     297        for(var i = 0; i < result.length; i++){ 
     298                var layerName = result[i].layerName; 
     299                var srcFilePath = dojoPrefixPath + result[i].layerName; 
     300                var dstFilePath = dojoReleaseDir + result[i].layerName; 
     301                var fileContents = result[i].contents; 
     302                 
     303                // make sure directory exists 
     304                var dir = dstFilePath.substr(0,dstFilePath.lastIndexOf('/')); 
     305                var d = new java.io.File(dir); 
     306                d.mkdirs(); 
     307                 
     308                //Build up string of files to ignore for the directory optimization step 
     309                var ignoreName = layerName.replace(/\.\.\//g, ""); 
     310                optimizeIgnoreString += (optimizeIgnoreString ? "|" : "") + buildUtil.regExpEscape(ignoreName) + "$"; 
     311                optimizeIgnoreString += "|" + buildUtil.regExpEscape(ignoreName + ".uncompressed.js") + "$"; 
     312                 
     313                //Burn in xd path for dojo if requested, and only do this in dojo.xd.js. 
     314                if(layerName.match(/dojo\.xd\.js/) && kwArgs.xdDojoPath){ 
     315                        fileContents = buildUtilXd.setXdDojoConfig(fileContents, kwArgs.xdDojoPath); 
     316                } 
     317 
     318                // Remove require statements, TODO: move this to build util? 
     319                fileContents = fileContents.replace( /(dojo|wti)\.require\(([\w\W]*?)\)/mg , ""); 
     320 
     321                //Flatten resources  
     322                //FIXME: Flatten resources. Only do the top level flattening for bundles 
     323                //in the layer files. How to do this for layers? only do one nls file for 
     324                //all layers, or a different one for each layer? 
     325                /* 
     326                if(layerName == "dojo.js"){ 
     327                        i18nUtil.flattenLayerFileBundles(dstFilePath, dojoReleaseDir + "nls", "nls", kwArgs); 
     328                }*/ 
     329 
     330                //Save uncompressed file. 
     331                var uncompressedFilePath = dstFilePath + ".uncompressed.js"; 
     332                var uncompressedContents = layerLegalText + fileContents; 
     333                if(layerName.match(/\.xd\.js$/) && !layerName.match(/dojo(\.xd)?\.js/)){ 
     334                        uncompressedContents = buildUtilXd.makeXdContents(uncompressedContents, prefixes); 
     335                } 
     336                fileUtil.saveFile(uncompressedFilePath, uncompressedContents); 
     337 
     338                //Intern strings if desired. Do this before compression, since, in the xd case, 
     339                //"dojo" gets converted to a shortened name. 
     340                if(kwArgs.internStrings){ 
     341                        logger.info("Interning strings for file: " + dstFilePath); 
     342                        var prefixes = dependencies["prefixes"] || []; 
     343                        var skiplist = dependencies["internSkipList"] || []; 
     344                        buildUtil.internTemplateStringsInFile(uncompressedFilePath, dojoReleaseDir, prefixes, skiplist); 
     345 
     346                        //Load the file contents after string interning, to pick up interned strings. 
     347                        fileContents = fileUtil.readFile(uncompressedFilePath); 
     348                } 
     349 
     350                //Save compressed file. 
     351                logger.trace("Optimizing (" + kwArgs.layerOptimize + ") file: " + dstFilePath); 
     352                var compressedContents = buildUtil.optimizeJs(dstFilePath, fileContents, layerLegalText, kwArgs.layerOptimize); 
     353                if(layerName.match(/\.xd\.js$/) && !layerName.match(/dojo(\.xd)?\.js/)){ 
     354                        compressedContents = buildUtilXd.makeXdContents(compressedContents, prefixes); 
     355                } 
     356                fileUtil.saveFile(dstFilePath, compressedContents); 
     357                 
     358                // Remove uncompressed file 
     359                fileUtil.deleteFile(uncompressedFilePath); 
     360        } 
     361 
     362        //Remove _base from the release. 
     363        fileUtil.deleteFile(dojoReleaseDir + "_base"); 
     364        fileUtil.deleteFile(dojoReleaseDir + "_base.js"); 
     365 
     366 
     367        //Save the dependency lists to build.txt 
     368        var buildText = "Files baked into this build:" + lineSeparator; 
     369        for(var i = 0; i < result.length; i++){ 
     370                buildText += lineSeparator + result[i].layerName + ":" + lineSeparator; 
     371                buildText += result[i].depList.join(lineSeparator) + lineSeparator; 
     372        } 
     373        fileUtil.saveFile(kwArgs.releaseDir + "/dojo/build.txt", buildText); 
     374        logger.info(buildText); 
     375 
     376        logger.info("Build is in directory: " + kwArgs.releaseDir); 
     377} 
     378//********* End release ********* 
     379 
    273380//********* Start _copyToRelease ********* 
    274381function _copyToRelease(/*String*/prefixName, /*String*/prefixPath, /*Object*/kwArgs){ 
    275382        //summary: copies modules and supporting files from the prefix path to the release 
  • util/buildscripts/jslib/buildUtil.js

     
    201201                                var deps = []; 
    202202                                var tmp; 
    203203                                RegExp.lastIndex = 0; 
    204                                 var testExp = /dojo.(require|platformRequire|provide)\([\w\W]*?\)/mg; 
     204                                var testExp = /(dojo|wti).(require|platformRequire|provide)\([\w\W]*?\)/mg; 
    205205                                while((tmp = testExp.exec(contents)) != null){ 
    206206                                        deps.push(tmp[0]); 
    207207                                } 
     
    222222                                var deps = []; 
    223223                                var tmp; 
    224224                                RegExp.lastIndex = 0; 
    225                                 var testExp = /dojo.(requireAfterIf|requireIf)\([\w\W]*?\)/mg; 
     225                                var testExp = /(dojo|wti).(requireAfterIf|requireIf)\([\w\W]*?\)/mg; 
    226226                                while((tmp = testExp.exec(contents)) != null){ 
    227227                                        deps.push(tmp[0]); 
    228228                                } 
     
    598598} 
    599599 
    600600//The regular expressions that will help find dependencies in the file contents. 
    601 buildUtil.masterDependencyRegExpString = "dojo.(requireLocalization|require|requireIf|provide|requireAfterIf|platformRequire)\\(([\\w\\W]*?)\\)"; 
     601buildUtil.masterDependencyRegExpString = "(dojo|wti).(requireLocalization|require|requireIf|provide|requireAfterIf|platformRequire)\\(([\\w\\W]*?)\\)"; 
    602602buildUtil.globalDependencyRegExp = new RegExp(buildUtil.masterDependencyRegExpString, "mg"); 
    603603buildUtil.dependencyPartsRegExp = new RegExp(buildUtil.masterDependencyRegExpString); 
    604604