Skip to content

Commit 1a8a4c5

Browse files
committed
Add highlight
1 parent ce759fa commit 1a8a4c5

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

_posts/2012-01-04-requirejs.markdown

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@ Module Pattern
1717
<http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth>
1818
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.
1919

20+
{% highlight javascript %}
2021
(function(){
2122
var private = 'I am private, the global scope is free of me !';
2223

2324
function iAmPrivateToo(){
2425
return 'This function is private and will not be avalaible via the global scope !'
2526
}
2627
})()
27-
28+
{% endhighlight %}
2829

2930
Object Litteral Pattern
3031
-----------------------
@@ -33,6 +34,7 @@ Maintenant que nous savons isoler notre code, nous devons le découper pour évi
3334

3435
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).
3536

37+
{% highlight javascript %}
3638
// script1.js
3739
(function(){
3840
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
6062
6163
console.log(myApp.aPublicFunction());
6264
})();
65+
{% endhighlight %}
6366

6467
Attention script2 dépend de script1. Il y a un ordre à respecter au niveau de la déclaration des dépendances.
6568

69+
{% highlight html %}
6670
<script src="script1.js"></script>
6771
<script src="script2.js"></script>
72+
{% endhighlight %}
6873

6974
Grouper les fichiers JS pour la prod
7075
------------------------------------
@@ -104,6 +109,7 @@ RequireJS est actuellement la solution mise en avant par :
104109

105110
Voici un exemple de code de RequireJS, suivez les commentaires pour les explications.
106111

112+
{% highlight javascript %}
107113
/* js/script1.js */
108114
define(
109115
id, /* (optionnel) */
@@ -133,6 +139,7 @@ Voici un exemple de code de RequireJS, suivez les commentaires pour les explicat
133139
},['js/script1'], function(script1){
134140
console.log(script.publicFunction());
135141
})
142+
{% endhighlight %}
136143

137144
Reprenons l'exemple précédent tout doucement.
138145

@@ -145,6 +152,7 @@ RequireJs définie deux notions : `define` et `require`. Simple non :D
145152

146153
Si nous prenons l'exemple d'un module simple.
147154

155+
{% highlight javascript %}
148156
define([
149157
'jquery',
150158
'underscore',
@@ -156,17 +164,20 @@ Si nous prenons l'exemple d'un module simple.
156164

157165
return { /* your public variables and functions here */ }
158166
});
167+
{% endhighlight %}
159168

160169
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.
161170

162171
Dans mon module, j'ai spécifié une liste de dépendances.
163172

173+
{% highlight javascript %}
164174
[
165175
'jquery',
166176
'underscore',
167177
'js/myScript',
168178
...
169179
]
180+
{% endhighlight %}
170181

171182
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).
172183

@@ -184,6 +195,7 @@ RequireJs va s'occuper de charger les dépendances des dépendances, ... et au f
184195

185196
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.
186197

198+
{% highlight javascript %}
187199
require({
188200
paths: {
189201
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
194206
$('#myID').text('Loaded ' + script1.publicFunction());
195207
});
196208
})
209+
{% endhighlight %}
197210

198211

199212
### Configurer RequireJS
200213

201214
Comme vous l'avez remarqué le premier paramètre de requireJS est un objet de configuration :
202215

216+
{% highlight javascript %}
203217
paths: {
204218
jquery: 'js/libs/jquery-1.7.1.min',
205219
underscore: 'js/libs/underscore-min'
206220
}
221+
{% endhighlight %}
207222

208223
Le paramètre `paths` nous permet de définir l'emplacement des librairies utilisées
209224

@@ -221,6 +236,7 @@ C'est le rôle de la configuration `paths: { jquery: 'js/libs/jquery-1.7.1.min',
221236

222237
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.
223238

239+
{% highlight html %}
224240
<html>
225241
<head>...</head>
226242
<body>
@@ -229,6 +245,7 @@ Il faut rajouter dans le HTML les balises `script` pour RequireJS et notre boots
229245
<script src="bootstrap.js"></script>
230246
</body>
231247
</html>
248+
{% endhighlight %}
232249

233250
RequireJS rajoutera les dépendances chargées via des balises script dans
234251
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
248265

249266
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.
250267

268+
{% highlight javascript %}
251269
({
252270
appDir: './src', /* Repertoire des sources */
253271
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
258276
optimizeCss: "standard.keepLines", /* On va même optimiser les CSS */
259277
dirExclusionRegExp: /node_modules|test|build/ /* on va exclure du processus de build certain repertoires. */
260278
})
279+
{% endhighlight %}
261280

262281
Le fichier bootstrap.js du réperoire build contiendra l'ensemble de notre code js minifié.
263282

@@ -293,9 +312,11 @@ Et voici une comparaisons des implémentations en terme de taille
293312

294313
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.
295314

315+
{% highlight html %}
296316
- <script src="require.js"></script>
297317
- <script src="boostrap.js"></script>
298318
+ <script src="almond-and-bootstrap.js"></script>
319+
{% endhighlight %}
299320

300321
Pour cela vous pouvez :
301322

@@ -309,6 +330,7 @@ Avec RequireJS et son plugin text vous avez la chance, de ne plus jamais écrire
309330
Voici un exemple de module RequireJS avec une dépendance texte (regardez
310331
le préfixe text!) :
311332

333+
{% highlight javascript %}
312334
/* bootstrap.js */
313335
require([
314336
'jquery',
@@ -327,13 +349,16 @@ le préfixe text!) :
327349
});
328350
});
329351
})
352+
{% endhighlight %}
330353

331354
Et voici le template en HTML utilisant le [micro templating underscore](http://documentcloud.github.com/underscore/#template)
332355

333-
/* views/template.html */
356+
{% highlight javascript %}
357+
<!-- views/template.html -->
334358
<div class="personn">
335359
<p>My name is <%= firstName %> <%= lastName %></p>
336360
</div>
361+
{% endhighlight %}
337362

338363
Si on faisait tourner le script de build r.js on obtiendrait dans le même fichier :
339364

0 commit comments

Comments
 (0)