51
Du JavaScript dans votre Usine Logiciel Christophe Jollivet

JavaScript dans l'usine logicielle

Embed Size (px)

DESCRIPTION

Slide for my presentation at JugSummerCamp about integration of JavaScript in software factory. First trying to use Java Tools like Maven, then embrassing JavaScript Tools like Grunt and Bower.

Citation preview

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