====== Flux de travail ProcessWire 00 ====== ===== structure de données ===== .jscsrc /site /dev /js /scss style.scss /tmp // js concaténé avant passage par google closure compiler /templates /scripts/s.js /styles/c.css ==== mise en place ==== npm init npm install grunt-contrib-concat --save-dev npm install grunt-contrib-sass --save-dev npm install grunt-contrib-watch --save-dev npm install google-closure-compiler --save-dev Plugin firefox pour le livereload : [[https://addons.mozilla.org/fr/firefox/addon/remotelivereload]] ==== .jscsrc ==== Sans doute à revoir, notamment parce que pas ES5. { "preset": "airbnb", "requireCamelCaseOrUpperCaseIdentifiers": null, } ==== gruntfile.js ==== module.exports = function (grunt) { //require require('google-closure-compiler').grunt(grunt); // init grunt.initConfig({ // concaténation des fichiers javascript concat: { dev: { src: ['site/dev/js/*.js'], dest: 'site/templates/scripts/s.js', }, prod: { src: ['site/dev/js/*.js'], dest: 'site/dev/tmp/s.uncompiled.js', // todo }, }, // conversion SCSS vers CSS sass: { dev: { options: { style: 'expanded', }, files: { 'site/templates/styles/c.css': 'site/dev/scss/style.scss', }, }, prod: { options: { style: 'compressed', sourcemap: 'none', }, files: { 'site/templates/scripts/s.js': 'site/dev/scss/style.scss', }, }, }, // closure compiler 'closure-compiler': { prod: { files: { 'site/templates/scripts/s.js': 'site/dev/tmp/s.uncompiled.js', }, options: { compilation_level: 'ADVANCED', language_in: 'ECMASCRIPT5_STRICT', }, }, }, // surveillance des répertoires watch: { options: { spawn: false, livereload: true, }, script: { files: ['site/dev/**/*'], tasks: ['concat:dev', 'sass:dev'], }, }, }); // loadNpmTasks grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-sass'); grunt.loadNpmTasks('grunt-contrib-watch'); // registerTask grunt.registerTask('default', ['concat:dev', 'sass:dev', 'watch']); grunt.registerTask('prod', ['concat:prod', 'sass:prod', 'closure-compiler:prod']); };