JSPM, des modules à la mode ES6

Bower, npm… c'est fini ! Place à JSPM. JSPM est un gestionnaire de paquets batis sur les bases du système de modules de ES6. Non content d'utiliser les dernières technologies ECMAScripts, il est capable d'installer des paquets provenant non seulement de NPM, mais aussi de Bower ou directement de GitHub. Et surtout, il vous offre la possibilité de coder vos apps sous forme de modules ES6. Le futur !

Installation

JSPM s'installe à l'aide de npm :

npm install -g jspm  

Gestionnaire de paquets

Après avoir démarré un nouveau projet à l'aide du classique jspm init qui fonctionne comme npm et bower, vous pourrez installer dans votre projet des dépendances à l'aide de la commande install :

jspm install npm:lodash-node  
jspm install github:components/jquery  
jspm install jquery  
jspm install myname=npm:underscore  

Ces quatre exemples nous montrent comment installer un paquet depuis npm, depuis github, depuis la première source trouvée, ou alors en choisissant un nom personnalisé. Plus besoin d'utiliser --save, c'est automatique.

Import

Les fichiers de votre application seront localisés dans un dossier lib (ça peut évidemment se changer dans la config). Ces fichiers sont importables dans vos scripts via leurs chemins. Chaque module peut importer n'importe quel module de jspm. Ainsi, nous pourrions avoir un fichier lib/post.js contenant :

export class Post {  
  constructor (title, content) {
    this.title = title;
    this.content = content;
  }

  toHTML () {
    var html = `
    <h2>${this.title}</h2>
    <div>
      ${this.content}
    </div>
    `;

    return html;
  }
}

Et un fichier lib/main.jscontenant :

import _ from 'lodash';  
import {Post} from 'app/post';

var posts = [{  
  title: 'Coin',
  content: '<p>Coin coin</p>'
}, {
  title: 'Pwet',
  content: '<p>Pwet pwet</p>'
}, {
  title: 'Wouf',
  content: '<p>Wouf wouf</p>'
}];

_.each(posts, (post) => {  
  var article = document.createElement('article');
  article.innerHTML = new Post(
    post.title, post.content).toHTML();
  document.body.appendChild(article);
});

On va rajouter un index.html contenant uniquement :

 <!doctype html>
  <script src="jspm_packages/system.js"></script>
  <script src="config.js"></script>
  <script>
    System.import('app/main');
  </script>

On commence donc par importer le fichier principal app/main situé dans lib/main.js. Celui-ci va importer lodash et app/post tel que le demande main.js. Vous pouvez alors charger votre index.html dans votre browser et… !! Il ne se passe rien… :o Il faut d'abord compiler l'application !

Build

…à l'aide de la commande :

jspm bundle app/main --inject  

On indique le nom du fichier principal de l'application et un fichier build.js contenant tous vos modules directement exécutable par votre navigateur.

Et la magie opère.

Hadrien

Hi, I'm a french Javascript Lead Developer, Web Architect from Toulouse, France. I've worked for 12 years for many projects with YUI, AngularJS, Aurelia.io and now React and React native.

Toulouse, France https://hadrien.eu