Transcript
Page 1: JavaScript dans l'usine logicielle

Du JavaScript dans votre Usine Logiciel

Christophe Jollivet

Page 2: JavaScript dans l'usine logicielle

Christophe Jollivet

• Neurobiologiste

• Informaticien

• Communautaire

• @jollivetc

Page 3: JavaScript dans l'usine logicielle

Usine logicielle

• Construire le livrable

• compilation / dépendances

• packaging

• Exécution des tests

• Génération de métriques / doc

Page 4: JavaScript dans l'usine logicielle
Page 5: JavaScript dans l'usine logicielle

La solution de facilité

• drop les fichiers dans webapp

• quelques tests Selenium...

Page 6: JavaScript dans l'usine logicielle

Intégration

• « A la Java »

• « A la JavaScript »

Page 7: JavaScript dans l'usine logicielle

« A la Java »

Page 8: JavaScript dans l'usine logicielle

Jasmine

• Framework de Test

• TestRunner

Page 9: JavaScript dans l'usine logicielle

FeedBack Continue

• Testem

• capture de navigateur

• exécution en continue

Page 10: JavaScript dans l'usine logicielle

Testem dans Jenkins

Page 11: JavaScript dans l'usine logicielle

Jasmine dans Maven

• Jasmine-maven-plugin

Page 12: JavaScript dans l'usine logicielle

Maven Tools for JavaScript Developers• http://mojo.codehaus.org/javascript-maven-

tools/

• Fourni

• Tests

• Minification

• JSLint

• Archetype

Page 13: JavaScript dans l'usine logicielle

<build> <extensions>! <extension>! <groupId>org.codehaus.mojo</groupId>! <artifactId>javascript-maven-plugin</artifactId>! ! <version>2.0.0-alpha-1</version>! </extension> </extensions></build>

Page 14: JavaScript dans l'usine logicielle

WebJar

• Dépendances transitives des librairies JS

• container Servlet3 compatible

• compatible SBT, Maven, Gradle, Leiningen

Page 15: JavaScript dans l'usine logicielle

WebJar

Page 16: JavaScript dans l'usine logicielle

WebJar

• Les WebJars sont dans WEB-INF/lib

Page 17: JavaScript dans l'usine logicielle

WebJar

• Les WebJars sont dans WEB-INF/lib

• ce qui est sous META-INF/resources d’un JAR sour WEB-INF/lib est accessible

Page 18: JavaScript dans l'usine logicielle

WebJar

• avantages

• dépendances transitives

• pas dans le SCM

• Inconvénients

• IDE ne fait pas de complétion

Page 19: JavaScript dans l'usine logicielle

« A la JavaScript »

Page 20: JavaScript dans l'usine logicielle

A la JavaScript

• Ecosystème d’outils

• NPM, Grunt, Bower

Page 21: JavaScript dans l'usine logicielle

A la JavaScript

• Ecosystème d’outils

• NPM, Grunt, Bower

PEINTURE FRAICHE

Page 22: JavaScript dans l'usine logicielle

NPM

• Node Package Module

• installation d’outils et de plugins

• Permet l’installation d’outils de façon globale

Page 23: JavaScript dans l'usine logicielle

NPM

• Installation par

• MSI

• pkg

• make install

• Installeur pour Jenkins

Page 24: JavaScript dans l'usine logicielle
Page 25: JavaScript dans l'usine logicielle

Grunt

• The JavaScript Task Runner

• version 0.4.1

Page 26: JavaScript dans l'usine logicielle

Installation

npm install -g grunt-cli

Page 27: JavaScript dans l'usine logicielle

configuration

• package.json

• Gruntfile.js ou Gruntfile.coffe

Page 28: JavaScript dans l'usine logicielle

package.json

• project metadata

• Grunt plugins as devDependencies

Page 29: JavaScript dans l'usine logicielle

package.json

{ "name": "my-project-name", "version": "0.1.0", "devDependencies": { "grunt": "~0.4.1", "grunt-contrib-jshint": "~0.6.3", "grunt-contrib-nodeunit": "~0.2.0", "grunt-contrib-uglify": "~0.2.2" }}

Page 30: JavaScript dans l'usine logicielle

package.json

• npm install

• npm install <module> --save-dev

Page 31: JavaScript dans l'usine logicielle

Gruntfile.js

• Il comprend

• la fonction wrapper

• configuration du projet et tâches

• chargement plugins et tâches

• tâches personnalisées

Page 32: JavaScript dans l'usine logicielle

Gruntfile.jsmodule.exports = function(grunt) {

// Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), uglify: { build: { src: 'src/<%= pkg.name %>.js', dest: 'build/<%= pkg.name %>.min.js' } } });

// Load the plugin that provides the "uglify" task. grunt.loadNpmTasks('grunt-contrib-uglify');

// Default task(s). grunt.registerTask('default', ['uglify']);

};

Page 33: JavaScript dans l'usine logicielle

CLI

• grunt <task>

• grunt --help

Page 34: JavaScript dans l'usine logicielle

Istanbul

• Couverture de test

Page 35: JavaScript dans l'usine logicielle

Plato

• Analyse de source JavaScript

Page 36: JavaScript dans l'usine logicielle

JsDuck

• Documentation

• syntaxe à la JavaDoc

• Support de Markdown

Page 37: JavaScript dans l'usine logicielle
Page 38: JavaScript dans l'usine logicielle

Yeoman

• Yo : scaffolding

• Grunt : build, preview, test...

• Bower : dependency management

Page 39: JavaScript dans l'usine logicielle

Yo

• Scaffolding

• installation interactive de Generator

Page 40: JavaScript dans l'usine logicielle
Page 41: JavaScript dans l'usine logicielle

Bower

• package manager for the web

Page 42: JavaScript dans l'usine logicielle

installation

npm install -g bower

Page 43: JavaScript dans l'usine logicielle

Configuration

• bower.json

• .bowerrc

Page 44: JavaScript dans l'usine logicielle

Utilisation

• bower install

• bower install <package>

• bower install <package>#<version>

Page 45: JavaScript dans l'usine logicielle

Utilisation

• bower list

• bower search

Page 46: JavaScript dans l'usine logicielle

bower.json

Page 47: JavaScript dans l'usine logicielle

Yeoman-maven-plugin

• configuration clean et war plugin

• Intégration dans le cycle Maven

Page 48: JavaScript dans l'usine logicielle

Sonar

Page 49: JavaScript dans l'usine logicielle

Sonar

• Plugin dans SonarQube

• Sonar-runner

• sonar-project.properties

• Complexe sur des projets mixtes

Page 50: JavaScript dans l'usine logicielle

Conclusion

• http://addyosmani.com/blog/making-maven-grunt/

• 3 solutions

• Code séparé

• ignorer outillage moderne

• Maven-exec plugin

Page 51: JavaScript dans l'usine logicielle

Questions ?

https://github.com/jollivetc/JugSummerCamp