Agustincl
Agustincl

Reputation: 174

Make a build in dojo 1.7.2

Well, I read all about build and all about dojo. Three days nightmare and so on... Need some help.

I'm using the last version of dojo. 1.7.2 in:

</sites/somesite/scripts/dojo17>
which contains 
--dojo
--dijit
--dojox
--utils

I use the following profile:

dependencies = {
stripConsole: "all",
action: "release",
optimize: "shrinksafe",
layerOptimize: "shrinksafe",
//optimize: "closure",
//layerOptimize: "closure",
//mini: true,
//localeList : 'en-us', 
//cssOptimize: "comments",      
//selectorEngine: "acme",
releaseName: "content7",
layers: [
{
    // This is a specially named layer, literally 'dojo.js'
    // adding dependencies to this layer will include the modules
    // in addition to the standard dojo.js base APIs.
    name: "dojo.js",
    customBase : true,
        dependencies: [ 
          "dojo.fx",
          "dijit.form.Button",              
          "dojox.gauges.AnalogGauge",
          "dojox.gauges.AnalogArcIndicator",
          "dojox.gauges.AnalogNeedleIndicator",
          "myApp.smartmix"
    ]           
    }
],
prefixes: [
    [ "dijit", "../dijit" ], 
    [ "dojox", "../dojox" ],
    [ "myApp", "../../../myApp" ]
]
};

then i use this build script

./build.sh profile=../../../../myApp/myApp.profile.js releaseDir=../../../release

And I got the

</sites/somesite/scripts/release/content7>
which contains
--dijit
--dojo
--dojox
--myApp

NOW in my index.html file I have

<script type="text/javascript">
//<![CDATA[
    var djConfig = {
        parseOnLoad: true,
        isDebug: false,
        modulePaths: {
            'myApp': '../myApp'
        }
    };
//]]>
</script>

<script type="text/javascript" src="scripts/release/content7/dojo/dojo.js"></script>

<script>
    dojo.require('myApp.smartmix');
</script>

And YES this reduce the 230 files loaded without the build to 153 files. BUT stills I (want to) believe that is posibble to reduce to one or 2 files.

But HOW?????

Please, some help will be appreciated!!!!

Upvotes: 8

Views: 2760

Answers (2)

mschr
mschr

Reputation: 8641

...
layers: [
{
// this is a layer 'application', which will cache all 
// dependencies to smartmix and declare smartmix in the same file
    name: "../../../myApp/smartmix.js",
        dependencies: [ 
          "dojo.fx",
          "dijit.form.Button",              
          "dojox.gauges.AnalogGauge",
          "dojox.gauges.AnalogArcIndicator",
          "dojox.gauges.AnalogNeedleIndicator",
          "myApp.smartmix"
    ]           
    }
],
...

you will need only two requests;

<script src=..dojo.js></script>

and

<script>require(["myApp.smartmix"], function(smartmixApplication) { });</script>

Upvotes: 0

mtyson
mtyson

Reputation: 8570

Ok, your profile is not right.

1st of all: You are using customBase, which is an advanced property for creating a minimal version of dojo core. I don't think you want that, do you? Normally, you just let dojo build its core normally, and that ends up as dojo.js in your output dir.

2nd of all: Every layer entry there will generate a minified .js file with all the files in dependencies inside it.

So, if you want your myApp stuff in a built JS file, you'll need to create a layer, and put your files in its dependencies.

Dojo will still generate all the individual files - but you don't have to deploy them. Just deploy the layer files. I usually have a layer for Dojo core, a layer for the dijit/dojox stuff I want, and then a layer for my custom JS. Then there are three JS files, which dojo will output in the dojo dir, and they are used in the HTML page.

Upvotes: 1

Related Questions