es6 modules-and-bundlers

19
ES6 modules Algiers tech meetup - March 25th, 2017 Ismail Hamadi(hamza) @ham_ism [email protected]

Upload: ismnoiet

Post on 16-Mar-2018

101 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: Es6 modules-and-bundlers

ES6 modules Algiers tech meetup - March 25th, 2017

Ismail Hamadi(hamza)@[email protected]

Page 2: Es6 modules-and-bundlers

• What is a module

Table of Content

• Before ES6 modules • ES6 modules• Export statement• Import statement• Webpack• Rollup.js

Page 3: Es6 modules-and-bundlers

What is a module

A module is like a chapter for a book.

A module is like a brick for your application.

Page 4: Es6 modules-and-bundlers

Before ES6 modules

Anonymous closureGlobal importsRevealing module patternCommonjs module patternAMD patternUMD pattern

Page 5: Es6 modules-and-bundlers

Anonymous closure

// global function function showUsers(users){ users.map(function(user){ console.log(user); }); }

(function () { // body of our module var users = ['mohamed', 'karim', 'amine']; showUsers(users); })();

Page 6: Es6 modules-and-bundlers

Global imports

// global function function showUsers(users){ users.map(function(user){ console.log(user); }); }

(function (x) {

// body of our module var users = ['mohamed', 'karim', 'amine']; x(users);

})(showUsers);

Page 7: Es6 modules-and-bundlers

Revealing module pattern

var myModule = (function () { // body of our module var users = ['mohamed', 'karim', 'amine'];

return { showUsers: function(){ users.map(function(user){ console.log(user); }); }, addUser: function(name){ users.push(name); } }

})(); myModule.showUsers();

Page 8: Es6 modules-and-bundlers

Commonjs module pattern

var users = ['mohamed', 'karim', 'amine'];

module.exports = { showUsers: function(){ users.map(function(user){ console.log(user); }); }, addUser: function(name){ users.push(name); } }

Page 9: Es6 modules-and-bundlers

Commonjs module pattern

var list = require('./commonjs-module-pattern');

list.showUsers(); list.addUser('algiers tech meetup'); console.log(Array(40).join('-')); list.showUsers();

// we can't access users. console.log('users are : ',list.users);

Page 10: Es6 modules-and-bundlers

AMD pattern

// amd pattern simplified implimentation. function define(dependencies,cb){ var dependenciesArray = []; dependencies.map(function(dep){dependenciesArray.push(dep());}); cb.apply(null,dependenciesArray); } function dep1(){ console.log('dep1');return 'bingo';

} function dep2(){ console.log('dep2');return 'mingo'; } define([dep1,dep2],function(dep1,dep2){ console.log('dep1 returned : ',dep1); console.log('dep2 returned : ',dep2); })

Page 11: Es6 modules-and-bundlers

UMD pattern

(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD define(['dep1', 'dep2'], factory); } else if (typeof exports === 'object') { // CommonJS module.exports = factory(require('dep1'), require('dep2')); } else { // Browser globals (Note: root is window) root.returnExports = factory(root.dep1, root.dep2); } }(this, function (dep1, dep2) { // Methods function notHelloOrGoodbye(){}; // A private method function hello(){}; // A public method because it's returned (see below) function goodbye(){}; // A public method because it's returned (see below)

// Exposed public methods return { hello: hello, goodbye: goodbye } }));

Page 12: Es6 modules-and-bundlers

es6 modules

supported globally by 0.01%*

* according to caniuse.com

Page 13: Es6 modules-and-bundlers

Export statement

export x;

x = named export x = default export x = alias export

Page 14: Es6 modules-and-bundlers

Import statement

import x from y;

x = named import x = default import x = alias import x = namespace import

y = import source

Page 15: Es6 modules-and-bundlers

Import statement

• imports are live read-only views on exported values• we can’t change the export object, however you can

change property name value.

Page 16: Es6 modules-and-bundlers

webpack

• bundle all the modules(concatenation) • convert ES6 code to ES5(using babel)

Page 17: Es6 modules-and-bundlers

Rollup.js

bundle all the modules( a clean bundle)

Page 18: Es6 modules-and-bundlers

Resources

http://rollupjs.org

medium.freecodecamp.com/javascript-modules-a-beginner-s-guide-783f7d7a5fcc

http://2ality.com/2014/09/es6-modules-final.html

https://code.lengstorf.com/learn-rollup-js/

https://egghead.io/lessons/javascript-intro-to-webpack

http://exploringjs.com/es6/ch_modules.html

https://webpack.js.org/guides/installation/

Page 19: Es6 modules-and-bundlers

Questions

?

@[email protected]

Thanks for your time