Bonjour à tous,

En ce vendredi matinal je voudrais revenir sur un problème récurrent avec notre Framework préféré : la création de builds optimisées personnalisées aux projets que nous développons.

Comme la dernière bêta est sortie (1.7.0 b5 - release le 29 aout), je voulais la tester sur mon projet. N'ayant pas fait de build depuis longtemps, j'ai d'abord essayé de me servir de l'outil online : http://build.dojotoolkit.org/

Ok c'est bien beau mais déjà il n'y a pas les version bêta et de plus pas moyen d'utiliser l'analyseur pour qu'il me crée un profile. Je suis obligé de tout rentrer à la main un à un : fastidieux mais fonctionnel.

Bon alors à ce moment là je décide de créer un profile.js perso appelons le custom.profile.js :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 
dependencies = {
	optimize:"shrinksafe",
	cssOptimize:"comments.keepLines",
	releaseName:"test",
	mini:"false",
 
	layers: [
	{
		name: "custom_dojo.js",
		dependencies: [
		"dojo.dnd.Source",
		"dojo.io.iframe",
		"dojo.parser",
		"dojo.store.Memory",
		"dojo.store.Observable",
		"dojo.data.ObjectStore",
		"dojo.date.locale",
		"dojo.data.ItemFileReadStore",
		"dojo.data.ItemFileWriteStore",
		"dijit.Calendar",
		"dijit.ColorPalette",
		"dijit.ProgressBar",
		"dijit.TitlePane",
		"dijit.Tooltip",
		"dijit.Tree",
		"dijit.tree.dndSource",
		"dijit.tree.ForestStoreModel",
		"dijit.Menu",
		"dijit.MenuItem",
		"dijit.MenuBar",
		"dijit.MenuBarItem",
		"dijit.PopupMenuItem",
		"dijit.PopupMenuBarItem",
		"dijit.Editor",
		"dijit.InlineEditBox",
		"dijit.form.Button",
		"dijit.form.ComboButton",
		"dijit.form.DateTextBox",
		"dijit.form.DropDownButton",
		"dijit.form.Form",
		"dijit.form.FilteringSelect",
		"dijit.form.RadioButton",
		"dijit.form.TextBox",
		"dijit.form.ComboBox",
		"dijit.form.ValidationTextBox",
		"dijit.layout.AccordionContainer",
		"dijit.layout.AccordionPane",
		"dijit.layout.ContentPane",
		"dijit.layout.TabContainer",
		"dijit.layout.BorderContainer",
		"dijit.Dialog",
		"dojo.parser",
		"dijit.Dialog",
		"dojox.encoding.digests.SHA1",
		"dojox.form.FileInputAuto",
		"dojox.form.Uploader",
		"dojox.form.uploader.FileList",
		"dojox.form.uploader.plugins.IFrame",
		"dojox.grid.EnhancedGrid",
		"dojox.grid.enhanced.plugins.CellMerge",
		"dojox.grid.enhanced.plugins.DnD",
		"dojox.grid.enhanced.plugins.Menu",
		"dojox.grid.enhanced.plugins.Menu",
		"dojox.grid.enhanced.plugins.NestedSorting",
		"dojox.grid.enhanced.plugins.IndirectSelection",
		"dojox.grid.DataGrid",
		"dojox.json.ref",
		"dojox.layout.FloatingPane"
		]
	}
	],
 
	prefixes: [
	[ "dojo", "../dojo" ],
	[ "dijit", "../dijit" ],
	[ "dojox", "../dojox" ]
	]
}
Déjà je ne sais pas si je m'y prends bien (la doc est ancienne et dénuée d'exemples concrets.

Ensuite j'ai cherché un tuto ici : http://mikael-morvan.developpez.com/...pt/dojo/build/

J'ai donc fais une ébauche de build.xml comme il le dit mais lorsque j'exécute j'ai ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
Buildfile: C:\Documents and Settings\username\My Documents\Aptana Studio 3 Workspace\test\build.xml
packaging:
     [java] js: Couldn't open file "./jslib/buildUtil.js".
     [java] js: uncaught JavaScript runtime exception: ReferenceError: "buildUtil" n'est pas défini
     [java] Java Result: 3
BUILD SUCCESSFUL
Total time: 437 milliseconds
Super vous me direz mais ce code est mensonger je n'ai aucune build nulle part de créée (en 437 ms tu m'étonnes !).

J'ai bien sûr également commencé par essayer un truc plus simple :
- mettre le custom.profile.js dans le répertoire util\buildscripts\profiles
- exécuter build.bat profile=custom (ou quoi que ce soit d'autre d'ailleurs)

Réponse :

C:\Documents and Settings\username\Desktop\dojo\util\buildscripts>java -Xms256m -X
mx256m -cp ../shrinksafe/js.jar;../closureCompiler/compiler.jar;../shrinksafe/s
hrinksafe.jar org.mozilla.javascript.tools.shell.Main ../../dojo/dojo.js baseUr
l=../../dojo load=build profile=custom
running under rhino
js: "<eval'ed string>#1(Function)#1(eval)", line 125: uncaught JavaScript runtim
e exception: TypeError: Cannot read property "length" from undefined
at <eval'ed string>#1(Function)#1(eval):125
at <eval'ed string>#1(Function)#1(eval):153
at <eval'ed string>#1(Function)#1(eval):187
at <eval'ed string>#1(Function)#1(eval):124
at <eval'ed string>#1(Function)#1(eval):103
at <eval'ed string>#1(Function)#1(eval):84
Voilà donc là je sèche pour faire une build de cette bêta adaptée à mon projet (le moins de HTTPRequest possible pour un lancement rapide).

Merci à ceux qui me liront et qui m'aideront.

Charlie.