You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Il nous permet de ne pas pourrir notre scope globale. En Javascript un scope est défini au niveau des fonctions. Pour éviter que nos variables arrivent dans le scope globale, il suffit de wrapper notre code autour d'une fonction et de l'exécuter tout de suite après.
19
19
20
+
{% highlight javascript %}
20
21
(function(){
21
22
var private = 'I am private, the global scope is free of me !';
22
23
23
24
function iAmPrivateToo(){
24
25
return 'This function is private and will not be avalaible via the global scope !'
25
26
}
26
27
})()
27
-
28
+
{% endhighlight %}
28
29
29
30
Object Litteral Pattern
30
31
-----------------------
@@ -33,6 +34,7 @@ Maintenant que nous savons isoler notre code, nous devons le découper pour évi
33
34
34
35
A partir du moment où l'on découpe notre code, nous allons avoir besoin d'exporter des fonctions et des attributs publiquement dans une variable globale (ça va une seule, on ne crie pas au scandale tout de suite).
35
36
37
+
{% highlight javascript %}
36
38
// script1.js
37
39
(function(){
38
40
var myApp = window.myApp = window.myApp || {};
@@ -60,11 +62,14 @@ A partir du moment où l'on découpe notre code, nous allons avoir besoin d'expo
60
62
61
63
console.log(myApp.aPublicFunction());
62
64
})();
65
+
{% endhighlight %}
63
66
64
67
Attention script2 dépend de script1. Il y a un ordre à respecter au niveau de la déclaration des dépendances.
65
68
69
+
{% highlight html %}
66
70
<scriptsrc="script1.js"></script>
67
71
<scriptsrc="script2.js"></script>
72
+
{% endhighlight %}
68
73
69
74
Grouper les fichiers JS pour la prod
70
75
------------------------------------
@@ -104,6 +109,7 @@ RequireJS est actuellement la solution mise en avant par :
104
109
105
110
Voici un exemple de code de RequireJS, suivez les commentaires pour les explications.
106
111
112
+
{% highlight javascript %}
107
113
/* js/script1.js */
108
114
define(
109
115
id, /* (optionnel) */
@@ -133,6 +139,7 @@ Voici un exemple de code de RequireJS, suivez les commentaires pour les explicat
133
139
},['js/script1'], function(script1){
134
140
console.log(script.publicFunction());
135
141
})
142
+
{% endhighlight %}
136
143
137
144
Reprenons l'exemple précédent tout doucement.
138
145
@@ -145,6 +152,7 @@ RequireJs définie deux notions : `define` et `require`. Simple non :D
145
152
146
153
Si nous prenons l'exemple d'un module simple.
147
154
155
+
{% highlight javascript %}
148
156
define([
149
157
'jquery',
150
158
'underscore',
@@ -156,17 +164,20 @@ Si nous prenons l'exemple d'un module simple.
156
164
157
165
return { /* your public variables and functions here */ }
158
166
});
167
+
{% endhighlight %}
159
168
160
169
Je n'ai pas spécifier l'ID, RequireJs va s'en occuper pour moi et je vous conseil de faire de même. Votre code sera réutilisable plus facilement.
161
170
162
171
Dans mon module, j'ai spécifié une liste de dépendances.
163
172
173
+
{% highlight javascript %}
164
174
[
165
175
'jquery',
166
176
'underscore',
167
177
'js/myScript',
168
178
...
169
179
]
180
+
{% endhighlight %}
170
181
171
182
Nous remarquons que pour myScript, le nom de la dépendance correspond à son chemin sans l'extension. Nous verrons par la suite comment configurer RequireJS afin de donner des chemins raccourcis (comme pour jQuery et underscore).
172
183
@@ -184,6 +195,7 @@ RequireJs va s'occuper de charger les dépendances des dépendances, ... et au f
184
195
185
196
Maintenant c'est sympa nous avons défini des modules, mais il nous manque un point d'entrée à notre application. C'est le rôle de `require` de faire ça. `require` va charger dynamiquement un module, puis ses dépendances, puis appeler la fonction passée en dernier paramètre.
186
197
198
+
{% highlight javascript %}
187
199
require({
188
200
paths: {
189
201
jquery: 'js/libs/jquery-1.7.1.min',
@@ -194,16 +206,19 @@ Maintenant c'est sympa nous avons défini des modules, mais il nous manque un po
Comme vous l'avez remarqué le premier paramètre de requireJS est un objet de configuration :
202
215
216
+
{% highlight javascript %}
203
217
paths: {
204
218
jquery: 'js/libs/jquery-1.7.1.min',
205
219
underscore: 'js/libs/underscore-min'
206
220
}
221
+
{% endhighlight %}
207
222
208
223
Le paramètre `paths` nous permet de définir l'emplacement des librairies utilisées
209
224
@@ -221,6 +236,7 @@ C'est le rôle de la configuration `paths: { jquery: 'js/libs/jquery-1.7.1.min',
221
236
222
237
Il faut rajouter dans le HTML les balises `script` pour RequireJS et notre bootstrap.js (celui faisant appel à toute nos dépendances) afin que le navigateur charge notre application.
223
238
239
+
{% highlight html %}
224
240
<html>
225
241
<head>...</head>
226
242
<body>
@@ -229,6 +245,7 @@ Il faut rajouter dans le HTML les balises `script` pour RequireJS et notre boots
229
245
<scriptsrc="bootstrap.js"></script>
230
246
</body>
231
247
</html>
248
+
{% endhighlight %}
232
249
233
250
RequireJS rajoutera les dépendances chargées via des balises script dans
234
251
le head et le navigateur les chargera automatiquement. Si la dépendance
@@ -248,6 +265,7 @@ RequireJS arrive avec un [script de build](https://github.com/jrburke/r.js/) qui
248
265
249
266
Si on appelle r.js avec le paramètre -o et en lui spécifiant un fichier de configuration : `r.js -o build.js`. r.js va parcourir l'ensemble des scripts et les minifier, puis va parcourir nos dépendances afin de les grouper. Les fichiers résultant seront placés dans un nouveau répertoire afin de ne pas écraser les sources.
250
267
268
+
{% highlight javascript %}
251
269
({
252
270
appDir: './src', /* Repertoire des sources */
253
271
baseUrl: ".", /* Le repertoire racine */
@@ -258,6 +276,7 @@ Si on appelle r.js avec le paramètre -o et en lui spécifiant un fichier de con
258
276
optimizeCss: "standard.keepLines", /* On va même optimiser les CSS */
259
277
dirExclusionRegExp: /node_modules|test|build/ /* on va exclure du processus de build certain repertoires. */
260
278
})
279
+
{% endhighlight %}
261
280
262
281
Le fichier bootstrap.js du réperoire build contiendra l'ensemble de notre code js minifié.
263
282
@@ -293,9 +312,11 @@ Et voici une comparaisons des implémentations en terme de taille
293
312
294
313
Si vous utilisez Almond qui ne fait pas de chargement dynamique, vous aurez besoin en prod de remplacer 'RequireJS + votre code' par un seul fichier minifié contenant tout.
295
314
315
+
{% highlight html %}
296
316
- <scriptsrc="require.js"></script>
297
317
- <scriptsrc="boostrap.js"></script>
298
318
+ <scriptsrc="almond-and-bootstrap.js"></script>
319
+
{% endhighlight %}
299
320
300
321
Pour cela vous pouvez :
301
322
@@ -309,6 +330,7 @@ Avec RequireJS et son plugin text vous avez la chance, de ne plus jamais écrire
309
330
Voici un exemple de module RequireJS avec une dépendance texte (regardez
310
331
le préfixe text!) :
311
332
333
+
{% highlight javascript %}
312
334
/* bootstrap.js */
313
335
require([
314
336
'jquery',
@@ -327,13 +349,16 @@ le préfixe text!) :
327
349
});
328
350
});
329
351
})
352
+
{% endhighlight %}
330
353
331
354
Et voici le template en HTML utilisant le [micro templating underscore](http://documentcloud.github.com/underscore/#template)
332
355
333
-
/* views/template.html */
356
+
{% highlight javascript %}
357
+
<!-- views/template.html -->
334
358
<divclass="personn">
335
359
<p>My name is <%= firstName %> <%= lastName %></p>
336
360
</div>
361
+
{% endhighlight %}
337
362
338
363
Si on faisait tourner le script de build r.js on obtiendrait dans le même fichier :
0 commit comments