On Github ModuloM / 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 :