Slides :
https://modulom.github.io/xke-js-modules-packagers/
function validateForm() { };
(function () {
var app = {};
app.validateForm = { };
return app;
})()
var APP = APP || {};
(function (APP) {
APP.validateForm = function () { };
return APP;
})(APP)
<link rel="stylesheet" href="css/bootstrap.min.css"/>
<link rel="stylesheet" href="css/jquery-ui.min.css"/>
<link rel="stylesheet" href="css/jquery-ui.structure.min.css"/>
<link rel="stylesheet" href="css/jquery-ui.theme.min.css"/>
<link rel="stylesheet" href="css/font-awesome.min.css"/>
<link rel="stylesheet" href="css/app.css"/>
<script charset="utf-8" src="js/d3.min.js"></script>
<script charset="utf-8" src="js/jquery-2.1.1.js"></script>
<script charset="utf-8" src="js/jquery-ui.min.js"></script>
<script charset="utf-8" src="js/bootstrap.min.js"></script>
<script charset="utf-8" src="js/app.js"></script>
gulp.task('bundle:js', function() {
return gulp.src(['src/*.js', 'lib/*.js'])
.pipe(concat('app.js'))
.pipe(uglify())
.pipe(gulp.dest('dist'));
});
Super, le code est concaténé, minifié, zippé
Mais qu’en est-il des dépendances entres modules ?
// L'ordre est important !
gulp.task('bundle:js', function() {
return gulp.src([
'node_modules/myproject-common/public/js/*.js',
'node_modules/myproject-common/shared/*.js',
'shared/*.js',
'public/utils/**/*.js',
'public/modules/core/**/*.js',
'public/modules/pages/**/*.js',
'public/modules/templates/**/*.js',
'public/modules/styleguide/scripts/!(main).js'
'public/angular-config.js',
'public/angular-application.js',
'public/modules/markets/*.js',
'public/components/dropdown/*.js',
'public/components/popin/*.js',
'public/components/**/*.js',
'public/templates/**/*.js',
'public/pages/**/*.js',
'public/modules/markets/*[!tests]*/*.js'
])
.pipe(concat('app.js'))
.pipe(uglify())
.pipe(gulp.dest('dist'));
});
//define(id?, dependencies?, factory);
// moduleA.js avec une dépendance au moduleB
define('moduleA', ['moduleB'], function (moduleB) {
moduleB.validateForm();
});
// moduleB.js
define({
validateForm: function () { }
});
La page github sur AMD
// moduleA.js avec une dépendance au moduleB
var moduleB = require('moduleB');
module.exports = function() {
moduleB.validateForm();
}
// moduleB.js
module.exports = {
validateForm: function () { }
};
Plus de détail sur CommonJS
// moduleA.js
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['moduleB'], factory);
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS
module.exports = factory(require('moduleB'));
} else {
// Browser globals (root is window)
root.returnExports = factory(root.moduleB);
}
}(this, function (moduleB) {
moduleB.validateForm();
}));
UMD, pour tous les liés
export { nom1, nom2, …, nomN };
export { variable1 as nom1, variable2 as nom2, …, nomN };
export let nom1, nom2, …, nomN; // fonctionne également avec var
export let nom1 = …, nom2 = …, …, nomN; // également avec var, const
export default expression;
export default function (…) { … } // également avec class, function*
export default function nom1(…) { … } // également avec class, function*
export { nom1 as default, … };
export * from …;
export { nom1, nom2, …, nomN } from …;
export { import1 as nom1, import2 as nom2, …, nomN } from …;
Référence sur les exports ES 2015
import nom from "nom-module";
import * as nom from "nom-module";
import { membre } from "nom-module";
import {membre as alias } from "nom-module";
import { membre1 , membre2 } from "nom-module";
import { membre1 , membre2 as alias2 , [...] } from "nom-module";
import membreDéfaut , { member [ , [...] ] } from "nom-module";
import membreDéfaut, * as alias from "nom-module";
import membreDéfaut from "nom-module";
Référence sur les imports ES 2015
// dans scripts/main.js
requirejs(['app'], function(app) {
//
}
// dans scripts/app.js
// requière moduleA comme dépendance
define(['moduleA', function(moduleA) {
return function () {
//
};
}
);
<script data-main="scripts/main" src="lib/require.js"></script>
Avantages :
Inconvénients :
// dans scripts/main.js
// requière moduleA comme dépendance
var moduleA = require('scripts/moduleA.js');
function () {
moduleA.valideForm();
//
}
// dans scripts/moduleA.js
module.exports = function () { }
$ browserify main.js > bundle.js
<script src="bundle.js"></script>
C’est l’oublié des outils de build, il est pourtant très performant.
Brunch, build incrémental, rapide, facile
Avantages :
Inconvénients :