AngularJS with RequireJS

21
AngularJS with RequireJS in practice @jowe Johannes Weber Mayflower GmbH

description

These are the slides from Johannes Weber's talk which were presented on AngularJS Lightning Talks #2 (2014-06-26) in Munich. More details about the event: http://www.meetup.com/AngularJS-Munich/events/164424472/

Transcript of AngularJS with RequireJS

Page 1: AngularJS with RequireJS

AngularJS with RequireJS in practice

@jowe

Johannes Weber

Mayflower GmbH

Page 2: AngularJS with RequireJS
Page 3: AngularJS with RequireJS

Preview Take-aways

‣ AngularJS injects instances

‣ RequireJS injects classes

‣ Keep testing in mind when organizing your app structure

Page 4: AngularJS with RequireJS

Is RequireJS really needed?

‣ Simple & small apps

‣ The whole code in one file

‣ Load all packages manually <script src=“…“></script

What about large apps…

Page 5: AngularJS with RequireJS

… like apps with more classes?

http://andrewgelman.com/2009/06/30/visualizing_tab/

Page 6: AngularJS with RequireJS

Schrift in weiß oder grau. Darauf achten, dass Text auf Motiv lesbar bleibt.

Thema

It’s time for…

$ bower install requirejs

Page 7: AngularJS with RequireJS

3 RequireJS APIs which you need to know

‣ define() define & register dependencies

‣ require() callback function invoked when all defines() have completed

‣ config() configure source paths, shims and aliases

Page 8: AngularJS with RequireJS

define([dep1], function(dep1) {})All your files are wrapped in a define()

define() must return a Object which is cached in a registry

Page 9: AngularJS with RequireJS

require([dep1], function(dep1) {})Act as initialization or root of the dependency tree

Starts the cascade of dependency checks and script loading

Starts the cascade of define() triggers

Page 10: AngularJS with RequireJS

require.config()

RequireJS configuration (path to sources, caching, etc.)

Configuration or aliases and shims

Page 11: AngularJS with RequireJS

„RequireJS is a JavaScript file and module loader.“

(load and runtime dependency)

„AngularJS comes with a built-in dependency injection mechanism.“

(construction and ng module dependency)

Page 12: AngularJS with RequireJS

Hot to use it with AngularJS?

‣ Use define() around all your code

‣ Use require.config() to set your paths & config

‣ Use require() to launch your initialize your App

https://github.com/tnajdek/angular-requirejs-seed

Page 13: AngularJS with RequireJS

Organize the app

Page 14: AngularJS with RequireJS

Example: Modules main.js & index.js

Page 15: AngularJS with RequireJS

Controller Example

Page 16: AngularJS with RequireJS

Example: Controller

Page 17: AngularJS with RequireJS

Example on Github

‣ https://github.com/feibeck/StarshipMayflower

Page 18: AngularJS with RequireJS

r.js - the RequireJS Optimizer

‣ Build & deploy RequireJS Apps

‣ Deploy uncompressed

‣ Deploy concatenate & uglified

‣ Plugins available for

‣ grunt (grunt-requirejs)

‣ gulp(gulp-requirejs)

‣ broccoli (broccoli-requirejs)

Page 19: AngularJS with RequireJS

Challenges on huge apps

‣ AMD is not just JavaScript, also CSS and TemplatesRequireJS provides plugins for that

‣ Growing app size from trivial to complexcould be solved by partitioned modules

‣ On-demand load and unload modulesCurrently very difficult

‣ AngularJS 2.0 - deferred loading with ES6 annonations

Page 20: AngularJS with RequireJS

Lazy load approaches

‣ https://github.com/ifyio/angularjs-lazy-loading-with-requirejs

‣ https://github.com/szhanginrhythm/angular-require-lazyload

‣ https://github.com/stu-salsbury/angular-couch-potato/

Page 21: AngularJS with RequireJS

@jowe

Let’s talk!

Johannes Weber