write better javascript with requirejs. what is requirejs?

59
Write Better Javascript with RequireJS

Upload: giana-tacey

Post on 01-Apr-2015

272 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Write Better Javascript with RequireJS. What is RequireJS?

Write Better Javascript

with RequireJS

Page 2: Write Better Javascript with RequireJS. What is RequireJS?

What is RequireJS?

Page 3: Write Better Javascript with RequireJS. What is RequireJS?

What is RequireJS?

from requirejs.org,

"RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node. Using a modular script loader like RequireJS will improve the speed and quality of your code."

Page 4: Write Better Javascript with RequireJS. What is RequireJS?

What is RequireJS?

• Async Script Loader• 12 k• Very actively developed• Well documented• new BSD / MIT

Page 5: Write Better Javascript with RequireJS. What is RequireJS?

Why use a tool like RequireJS?

 

Page 6: Write Better Javascript with RequireJS. What is RequireJS?

Why use a tool like RequireJS?

Because Javascript Sucks. Also, user side scripting makes things worse.

Page 7: Write Better Javascript with RequireJS. What is RequireJS?

JS sucks.├── local_settings.py├── manage.py├── datacleaning│   ├── admin.py│   ├── forms.py│   ├── migrations│   │   └── 0001_initial.py│   ├── models.py│   ├── tests.py│   ├── urls.py│   └── views.py├── journals│   ├── admin.py│   ├── fixtures│   │   └── 20101124_5.03.json│   ├── forms.py│   ├── migrations│   │   ├── 0001_initial.py│   │   ├── 0002_auto__images__add_entry.py│   │   └── 0003_loading_test_journal_entries.py│   ├── models.py│   ├── tests.py│   ├── urls.py│   └── views.py├── lib│   ├── context_processors.py│   ├── string_processors.py│   ├── template.py│   ├── urlmiddleware.py│   ├── user.py│   └── widgets.py

├── parks│   ├── admin.py│   ├── fixtures│   │   ├── initial_featurecategories.json│   │   └── train_examples.json│   ├── forms.py│   ├── importers│   │   └── recdata.py│   ├── management│   │   ├── commands│   │   │   ├── exportoregonparks.py│   │   │   ├── importparks.py│   │   │   ├── ......

Page 8: Write Better Javascript with RequireJS. What is RequireJS?

JS sucks.├── ckeditor│   ├── ckeditor.js│   ├── contents.css│   ├── lang│   │   ├── af.js│   │   ├── ar.js│   │   ├── bg.js│   │   ├── bn.js│   │   ├── bs.js│   │   ├── ca.js│   │   ├── cs.js│   │   ├── cy.js│   │   ├── da.js│   │   ├── de.js│   │   ├── el.js│   │   ├── en-au.js│   │   ├── en-ca.js│   │   ├── en-gb.js│   │   ├── en.js│   │   ├── eo.js│   │   ├── es.js│   │   ├── et.js│   │   ├── eu.js│   │   ├── fa.js│   │   ├── fi.js│   │   ├── fo.js│   │   ├── fr-ca.js│   │   ├── fr.js│   │   ├── gl.js│   │   ├── gu.js│   │   ├── he.js

│   │   ├── hi.js│   │   ├── hr.js│   │   ├── hu.js│   │   ├── is.js│   │   ├── it.js│   │   ├── ja.js│   │   ├── ka.js│   │   ├── km.js│   │   ├── ko.js│   │   ├── _languages.js│   │   ├── lt.js│   │   ├── lv.js│   │   ├── mn.js│   │   ├── ms.js│   │   ├── nb.js│   │   ├── nl.js│   │   ├── no.js│   │   ├── pl.js│   │   ├── pt-br.js│   │   ├── pt.js│   │   ├── ro.js│   │   ├── ru.js│   │   ├── sk.js│   │   ├── sl.js│   │   ├── sr.js│   │   ├── sr-latn.js│   │   ├── sv.js│   │   ├── th.js│   │   ├── _trans.txt│   │   ├── tr.js│   │   ├── uk.js│   │   ├── vi.js│   │   ├── zh-cn.js│   │   └── zh.js│   ├── plugins│   │   └── styles│   │       └── styles

│   │           └── default.js│   ├── skins│   │   └── kama│   │       ├── dialog.css│   │       ├── editor.css│   │       ├── icons.png│   │       ├── icons_rtl.png│   │       ├── images│   │       │   ├── dialog_sides.gif│   │       │   ├── dialog_sides.png│   │       │   ├── dialog_sides_rtl.png│   │       │   ├── mini.gif│   │       │   ├── noimage.png│   │       │   ├── sprites_ie6.png│   │       │   ├── sprites.png│   │       │   └── toolbar_start.gif│   │       ├── skin.js│   │       └── templates.css│   └── SQRLY_TEAM_PLEASE_README__LICENSE├── elevationservice_eg_google.js├── jquery.form.js├── jquery.history.js├── jqueryplugins│   ├── jquery.address-1.3.js│   └── jquery.simplemodal-1.3.min.js├── markers.js├── pages│   ├── add-park.js│   ├── datacleaning.js│   └── park-detail.js├── park-ratings.js├── polylinearray_eg_google.js├── star-rating.js└── star-rating-metadata.js

Page 9: Write Better Javascript with RequireJS. What is RequireJS?

JS sucks1. code is too long2. just a little code from somewhere else3. copy and paste4. goto: 1

Page 10: Write Better Javascript with RequireJS. What is RequireJS?

JS sucks<head>   <script src="foo.js" type="text/javascript"></script>  <script src="bar.js" type="text/javascript"></script>  <script src="baz.js" type="text/javascript"></script>  <script src="biff.js" type="text/javascript"></script>  <script src="bop.js" type="text/javascript"></script>  <script src="foo.js" type="text/javascript"></script>  <script src="bar.js" type="text/javascript"></script>  <script src="baz.js" type="text/javascript"></script>  <script src="biff.js" type="text/javascript"></script>  <script src="bop.js" type="text/javascript"></script>   <script src="foo.js" type="text/javascript"></script>  <script src="bar.js" type="text/javascript"></script>  <script src="baz.js" type="text/javascript"></script>  <script src="biff.js" type="text/javascript"></script>  <script src="bop.js" type="text/javascript"></script>...</head>  

Page 11: Write Better Javascript with RequireJS. What is RequireJS?

RequireJS makes JS suck less• Help you make your code more modular• manages script loading for you• build and compress your code

 (oh, and other stuff too...)

Page 12: Write Better Javascript with RequireJS. What is RequireJS?

Making code more modular

Page 13: Write Better Javascript with RequireJS. What is RequireJS?

So what's the code look like?

Page 14: Write Better Javascript with RequireJS. What is RequireJS?

Loading from the page<script data-main="pages/profile.js"            src="scripts/require.js"></script>   <script src="scripts/require.js"></script>require(["pages/profile"]);

Page 15: Write Better Javascript with RequireJS. What is RequireJS?

Loading from the pagerequire(["pages/profile"], function(Profile) {    ...do stuff...    require.ready() {        ...do more stuff...         Profile.init(INSERT_SOMETHING_HERE);     });}); 

Page 16: Write Better Javascript with RequireJS. What is RequireJS?

Defining a Moduledefine(["foo", "baz", "x"], function(Foo, Baz) {    ...do stuff...    return {        init: function(data) {            container = data;        },        do_something: some_internal_method    }}); 

Page 17: Write Better Javascript with RequireJS. What is RequireJS?

Loading - production vs dev

Page 18: Write Better Javascript with RequireJS. What is RequireJS?

Loading - production vs dev

Page 19: Write Better Javascript with RequireJS. What is RequireJS?

Loading - production vs dev

Page 20: Write Better Javascript with RequireJS. What is RequireJS?

Let's look at an example

Page 21: Write Better Javascript with RequireJS. What is RequireJS?

require("map", function(Map) {    ... map file is loaded ... });

Page 22: Write Better Javascript with RequireJS. What is RequireJS?

require("map", function(Map) {    ... map file is loaded ... });

Page 23: Write Better Javascript with RequireJS. What is RequireJS?

require("map", function(Map) {    ... map file is loaded ... });

define(["gm", "foo"], function(GM, Foo) {    ... set up js ...     return {};});

Page 24: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    ... set up js ...     return {};});

require("map", function(Map) {    ... map file is loaded ... });

Page 25: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    ... set up js ...     return {};});

require("map", function(Map) {    ... map file is loaded ...     require.ready(function() {        ... page is ready ...     }); });

Page 26: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    ... set up js ...     return {};});

require("map", function(Map) {    ... map file is loaded ...     require.ready(function() {        Map.init();     }); });

Page 27: Write Better Javascript with RequireJS. What is RequireJS?

require("map", function(Map) {    ... map file is loaded ...     require.ready(function() {        Map.init();     }); });

define(["gm", "foo"], function(GM, Foo) {    ... set up js ...     return {};});

Page 28: Write Better Javascript with RequireJS. What is RequireJS?

require("map", function(Map) {    ... map file is loaded ...     require.ready(function() {        Map.init();     }); });

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {};});

Page 29: Write Better Javascript with RequireJS. What is RequireJS?

require("map", function(Map) {    ... map file is loaded ...     require.ready(function() {        Map.init();     }); });

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init    };});

Page 30: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init    };});

require("map", function(Map) {    ... map file is loaded ...     require.ready(function() {        Map.init();     }); });

Page 31: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init    };});

require("map", function(Map) {    ... map file is loaded ...     require.ready(function() {        Map.init("div_id");     }); });

Page 32: Write Better Javascript with RequireJS. What is RequireJS?

That's it.

Page 33: Write Better Javascript with RequireJS. What is RequireJS?

require("map", function(Map) {    ... map file is loaded ...     require.ready(function() {        Map.init("div_id");    });});

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init    };});

Page 34: Write Better Javascript with RequireJS. What is RequireJS?

require("map", function(Map) {    ... map file is loaded ...     require.ready(function() {        Map.init("div_id");    });});

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init,        map: m    };});

Page 35: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init,        map: m    };});

require("map", function(Map) {    ... map file is loaded ...     require.ready(function() {        Map.init("div_id");     }); });

Page 36: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init,        map: m    };});

require("map", function(Map) {    ... map file is loaded ...     require.ready(function() {        Map.init("div_id");        a = Map.m;    });});

Page 37: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init,        map: m    };});

require("map", function(Map) {    ... map file is loaded ...     require.ready(function() {        Map.init("div_id");        a = Map.m;        Map.init("another_div_id");        b = Map.m;    });});

Page 38: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init,        map: m    };});

require("map", function(Map) {    ... map file is loaded ...     require.ready(function() {        Map.init("div_id");        a = Map.m;        Map.init("another_div_id");        b = Map.m;    });});

Page 39: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init,        map: m    };});

require("map", function(Map) {    require.ready(function() {        Map.init("div_id");    });});

Page 40: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init,        map: m    };});

require("map", function(Map) {    require.ready(function() {        Map.init("div_id");        a = Map;    });});

require("map", function(Map) {    require.ready(function() {        Map.init("another_div_id");        b = Map;    });});

// a === b

Page 41: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init,        map: m    };});

require({context:"abc"},"map", function(Map) {    require.ready(function() {        Map.init("div_id");        a = Map.m;    });});

require({context:"xyz"},"map", function(Map) {    require.ready(function() {        Map.init("another_div_id");        b = Map.m;    });});

// a.m !== b.m

Page 42: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init,        map: m    };});

require("map", function(Map) {    require.ready(function() {        a = new Map.init("div_id");        b = new Map.init("another_id");    });});

Page 43: Write Better Javascript with RequireJS. What is RequireJS?

require("map", function(Map) {    require.ready(function() {        a = new Map.init("div_id");        b = new Map.init("another_id");    });});

define(["gm", "foo"], function(GM, Foo) {    var m;    function init(id) {        m = GM.create(id);    }    return {        init: init,        map: m    };});

Page 44: Write Better Javascript with RequireJS. What is RequireJS?

require("map", function(Map) {    require.ready(function() {        a = new Map.init("div_id");        b = new Map.init("another_id");    });});

define(["gm", "foo"], function(GM, Foo) {    function init(id) {        var that = {};        that.m = GM.create(id);        return that;    }    return {        init: init,        map: m    };});

Page 45: Write Better Javascript with RequireJS. What is RequireJS?

require("map", function(Map) {    require.ready(function() {        a = new Map.init("div_id");        b = new Map.init("another_id");    });});

define(["gm", "foo"], function(GM, Foo) {    function init(id) {        var that = {};        that.m = GM.create(id);        return that;    }    return {        init: init    };});

Page 46: Write Better Javascript with RequireJS. What is RequireJS?

require("map", function(Map) {    require.ready(function() {        a = new Map.init("div_id");        b = new Map.init("another_id");    });});

define(["gm", "foo"], function(GM, Foo) {    function init(id) {        var that = {};        that.m = GM.create(id);        return that;    }    return init;});

Page 47: Write Better Javascript with RequireJS. What is RequireJS?

require("map", function(Map) {    require.ready(function() {        a = new Map.init("div_id");        b = new Map.init("another_id");    });});

define(["gm", "foo"], function(GM, Foo) {    return function(id) {        var that = {};        that.m = GM.create(id);        return that;    }});

Page 48: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    return function(id) {        var that = {};        that.m = GM.create(id);        return that;    }});

require("map", function(Map) {    require.ready(function() {        a = new Map.init("div_id");        b = new Map.init("another_id");    });});

Page 49: Write Better Javascript with RequireJS. What is RequireJS?

define(["gm", "foo"], function(GM, Foo) {    return function(id) {        var that = {};        that.m = GM.create(id);        return that;    }});

require("map", function(Map) {    require.ready(function() {        a = new Map("div_id");        b = new Map("another_id");    });});

Page 50: Write Better Javascript with RequireJS. What is RequireJS?

Plugins

define([ "foo!bar" ], function() { ... });

Page 51: Write Better Javascript with RequireJS. What is RequireJS?

When order matters...define(["order!foo", "order!bar", "order!baz"], function(Foo, Bar, Baz) {    ...});

Page 52: Write Better Javascript with RequireJS. What is RequireJS?

Loading a Templatedefine(["resig_micro", "text!bar"], function(Resig, BarTmpl) {    ...    data = {   foo: 1,                    bar: "once upon a time..." };    rendered = Resig(BarTmpl, data);    ...});

Page 53: Write Better Javascript with RequireJS. What is RequireJS?

Write in CoffeeScriptdefine(["cs!foo"], function(Foo) {    ...});

Page 54: Write Better Javascript with RequireJS. What is RequireJS?

Loading CSSdefine(["css!foo"], function() {    ...});

function loadCss(url) {    var link = document.createElement("link");    link.type = "text/css";    link.rel = "stylesheet";    link.href = url;    document.getElementsByTagName("head")                                                                [0].appendChild(link);}

Page 55: Write Better Javascript with RequireJS. What is RequireJS?

Loading Offsite contentdefine(["foo", "https://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"], function(Foo, $) {    ...});

Page 56: Write Better Javascript with RequireJS. What is RequireJS?

Loading Google Maps, etc.define(["async!http://maps.google.com/maps/api/js?                                               sensor=false!callback"], function() {    return google.maps;})

Page 57: Write Better Javascript with RequireJS. What is RequireJS?

Getting specific with your settingsrequire({          baseUrl: "/another/path",          paths: {              "some": "some/v1.0"          },          waitSeconds: 15,          locale: "fr-fr",          context: "foo"      }, ["some/module"],      function(someModule) {...

//    some/v1.0/module.js

Page 58: Write Better Javascript with RequireJS. What is RequireJS?

Compiling / Minifying./requirejs/build/build.sh app.build.js

• app.build.js• dev/

o your_stuff.js• requirejs/

o require.js source files• built/

o destination directory

app.build.js({    appDir: "dev/",    baseUrl: "scripts",    dir: "built/",    optimize: "uglify",    ...    paths?    priority?    ...})

github.com/jrburke/r.js/blob/master/build/example.build.js

Page 59: Write Better Javascript with RequireJS. What is RequireJS?

Thanks

Chris Pitzerrequirejs.org

#requirejs on irc.freenode.net