Les automatiseurs de tâches
Depuis l’apparition de Node.js, un large éventail de nouveaux types d’outils est apparu dans le paysage du développement, et ce à tous les niveaux aussi bien en ce qui concerne l’écriture du code, mais aussi concernant son maintien et sa mise en conformité, prenant en compte aussi bien l’aspect client que serveurs, remettant parfois en cause le principe de stockage de l’information, et bien sur tout en permettant d’automatiser un grand nombre de tâche qui sont souvent répétitives, continuelles et qui peuvent, de ce fait, devenir très rapidement chronophages. En ce qui concerne l’écriture du code et le développement d’applications il existe deux principales familles, les pre-post processeurs et les automatiseurs de tâches.
Ce sont principalement sur ces derniers types d’outils, les automatiseurs de tâches, que nous allons nous focaliser au travers de cet article, les automatiseurs de tâches. Il en existe plusieurs familles qui peuvent être employées aussi bien alternativement que conjointement. Aucunes n’est primordiales, toutes sont complémentaires et en fonction des projets, des besoins, des extensions, on optera pour l’une ou l’autre ou l’ensemble. Si vous souhaitez approfondir les outils de pre-post processing, rapprochez vous de l’article Pré/Post-Processeur et autres outils.
Comment ces outils s’utilisent ils, et s’intégrent ils dans nos flux de production?
Quelques soient les besoins auxquels ils répondent ces outils s’utilisent de manière indépendante et externe à quelque flux de travail que nous ayons. Il s’agit générallement de succession de tâches que l’on va lancer pour répondre à des besoins. Ces tâches peuvent être lancer de manière ponctuelles et manuelles, comme de manière automatiques et programmées.
Afin de ne pas être destructrices, c’est à dire afin de pouvoir permettre d’être appliqué plusieurs fois, ces tâches font souvent référence distinctement à des dossiers sources d’une part et à des dossiers de sortie d’autre part.
De ce fait, cette différence, entre développement (source) et production (sortie), permet de pouvoir modifier à volonté certains paramètres, et d’ainsi de pouvoir regénérer l’application d’une tâche à souhait, sans pour autant venir détruire les fichiers originels de travail.
Par exemple, si une tâche permet d’opimiser le poids des images, si cette tâche est réappliquée plusieurs fois, nous n’obtiendrons pas un cumul d’optimisation appliquée à des premières optimisations, mais bien à chaque fois à l’application d’une optimisation sur une image source. Ou de même si une tâche permet de minimiser un fichier de code, en retirant les espaces et en employant des noms de variables et fonctions beaucoup plus court, le fichier source lui restera lisible humainement et formatté selon le cjoix et le confort du développeur.
Installation et mise à disposition de ces outils.
Comme dit dans l’introduction de cet article, les outils auxquels nous faisons référence, s’emploient sous Node.js. Donc il faut déjà commencer par installer Node et par la même son gestionnaire d’extensions NPM. Rendez vous sur la page des téléchargements et optez pour la plateforme de votre choix, Mac ou Windows. L’installer de base et par défaut est largement suffisant. Lancez le et suivez les diverses étapes classiques et par défaut.
Une fois cette opération terminée, sous Windows ouvrez la console de commande et sous MacOS lancez le terminal. quelque soit la plateforme saisissez les deux instructions suivantes, vous devriez obtenir en réponse les versions respectives (bien qu’elles puissent être différentes que celles présentées dans l’image ci-dessous.
node -v npm -v
Pour plus d’informations sur l’usage de Node.js rapprochez vous de Prendre en main Node.js.
Les différents outils disponibles.
Certains peuvent outils se distinguer surtout par le catalogue de plugins (ou d’extensions) qu’ils proposent, ou par rapport à l’intégration transversale qu’ils peuvent engendrer, entendre par là la possibilité d’utilisation conjointe, et complémentaire, qui reste possible avec d’autres outils.
Il existe diverses familles d’outils parmis lesquelles on retrouve entre autres, les automatiseurs de tâches (qui vont permettrent de lancer des processus enchainant des séries de tâches automatisées), les gestionnaires de dépendences (qui permettront en un simple clic non seulement d’installer et rendre disponible les différents packages nécessaires, mais aussi de s’assurer d’en avoir la dernière version) et les outils de constructions (qui aideront à rapidement réaliser et mettre en place les processus de construction et d’élaboration d’applications web).
Outils | Langages | Nature | Description | |
---|---|---|---|---|
Bower | ![]() | Task Automator | Dependency management | Keeping track of all these packages and making sure they are up to date (or set to the specific versions you need) is tricky. Bower to the rescue! Bower can manage components that contain HTML, CSS, JavaScript, fonts or even image files. Bower doesn’t concatenate or minify code or do anything else - it just installs the right versions of the packages you need and their dependencies. |
Broccoli | ![]() | Task Automator | Asset pipeline for ambitious applications | A Brocfile.js in the project root tells Broccoli how to build your project's assets. It can be as simple or as complicated as your project needs. For this example, we're going to keep it relatively simple and just build Sass into CSS and Coffeescript into Javascript. |
Brunch | ![]() | Task Automator | Build Tool | brunch - :fork_and_knife: Fast front-end web app build tool with simple declarative config, seamless incremental compilation for rapid development, an opinionated pipeline and workflow, and core support for source maps. |
Gobblejs | ![]() | Task Automator | Build Tool | The last build tool you'll ever need (Gobble is still in active development, and may not be ready for primetime yet - APIs may change, and huge swathes of documentation are currently missing. Bear with me!) |
Grunt | ![]() | Task Automator | Javascript Task Runner | Grunt is a JavaScript task runner, a tool used to automatically perform frequent tasks such as minification, compilation, unit testing, and linting. It uses a command-line interface to run custom tasks defined in a file (known as a Gruntfile). Grunt was created by Ben Alman and is written in Node.js. It is distributed via npm. Presently, there are more than five thousand plugins available in the Grunt ecosystem. Companies that use Grunt include Adobe Systems, jQuery, Twitter, Mozilla, Bootstrap, Cloudant, Opera, WordPress, Walmart and Microsoft. |
Gulp | ![]() | Task Automator | Javascript Task Runner | gulp.js is an open-source JavaScript toolkit by Fractal Innovations and the open source community at GitHub, used as a streaming build system in front-end web development. It is a task runner built on Node.js and npm, used for automation of time-consuming and repetitive tasks involved in web development like minification, concatenation, cache busting, unit testing, linting, optimization, etc. gulp uses a code-over-configuration approach to define its tasks and relies on its small, single-purposed plugins to carry them out. gulp ecosystem has 300+ such plugins made available to choose from. |
Mimosa | ![]() | Task Automator | Javascript Task Runner | A lightning-fast build tool for modern web development. Mimosa includes support for JavaScript, CSS, and template compilers, bower, linting, optimization, serving, RequireJS support, and Live Reload. It is also modular and pluggable for authoring your own functionality. |
Mocha | ![]() | Task Automator | Javascript test Framework | Mocha is a JavaScript test framework running on node.js, featuring browser support, asynchronous testing, test coverage reports, and use of any assertion library. |
NPM | ![]() | Task Automator | Package Manager | npm is a package manager for the JavaScript programming language. It is the default package manager for the JavaScript runtime environment Node.js. It consists of a command line client, also called npm, and an online database of public and paid-for private packages, called the npm registry. The registry is accessed via the client, and the available packages can be browsed and searched via the npm website. The package manager and the registry are managed by npm, Inc. |
Pint | ![]() | Task Automator | Javascript Task Runner | Pint is a small, asynchronous, dependency aware wrapper around Grunt attempting to solve some of the problems that accompany a build process at scale. A typical Gruntfile starts with, at a minimum, some variation of: jsHint, jasmine, LESS, handlebars, uglify, copy, and clean stack. Just these half dozen or so plugins can balloon your Gruntfile upwards of 300 lines and when you add complex concatenation, cache busting, and versioning can cause it to grow well in to the 1000+ lines. Pint allows you to break up and organize your build into small testable pieces. |
task-mule | ![]() | Task Automator | Javascript Task Runner | So why Task-Mule? Task-Mule is a bit different. It is a task runner of course, but is not just for build scripts. It was designed for large automation jobs with complex dependencies between tasks. Task-Mule was built for piece-meal testing of individual tasks. Each task can be tested from the command line (or test runner) with ease, even if those tasks will only ever be a dependency for other tasks in production. Task-Mule tasks can also easily be tested via tools like Mocha. More on that later. Task-Mule relies on npm. Install the dependencies you need via npm and then wire them into your script through tasks written in JavaScript. |
taskr | ![]() | Task Automator | Javascript Task Runner | Taskr is a highly performant task runner, much like Gulp or Grunt, but written with concurrency in mind. With Taskr, everything is a coroutine, which allows for cascading and composable tasks, but unlike Gulp, it's not limited to the stream metaphor. Taskr is extremely extensible, so anything can be a task. Our core system will |
Webpack | ![]() | Task Automator | Bundler for JavaScript | A bundler for javascript and friends. Packs many modules into a few bundled assets. Code Splitting allows to load parts for the application on demand. Through 'loaders,' modules can be CommonJs, AMD, ES6 modules, CSS, Images, JSON, Coffeescript, LESS, ... and your custom stuff. javascript module-loader |
Yarn | ![]() | Task Automator | Dependency management | Fast, reliable, and secure dependency management. Circle Status Appveyor Status Discord Chat Commitizen friendly. ---. Fast: Yarn caches every package it has downloaded, so it never needs to download the same package again. It also does almost everything concurrently to maximize resource |
Yeoman | ![]() | Task Automator | Kickstarter new projects | Yeoman is an open source client-side development stack, consisting of tools and frameworks intended to help developers build web applications. Yeoman runs as a command-line interface written for Node.js and combines several functions into one place, such as generating a starter template, managing dependencies, running unit tests, providing a local development server, and optimizing production code for deployment. |
Leur principe d’utilisation
Afin de ne pas exéder du cadre de présentation de cet article, je vous propose que nous voyons de manière plus verticale, et au travers d’articles indépendant, quelques unes des utilisations, à savoir , les deux principaux automatiseurs de tâches fréquemment rencontrés qui sont Grunt et Gulp et en parrallèle explorer le gestionnaire de dépendences qu’est Bower.
Aller plus loin

Smashing Node.js
Guillermo Rauch
Smashing Node.js: JavaScript Everywhere equips you with the necessary tools to understand Node.js and its uses in developing efficient web apps. With more traditional web servers becoming obsolete, having knowledge on servers that achieve high scalability and optimal resource consumption using Node.js is the key to your app development success. Teaching you the essentials to making event-driven server-side apps, this book demonstrates how you can use less space and take less time for communicati...

Grunt - Getting started with Grunt
Jaime Pillora
Getting Started with Grunt: The JavaScript Task Runner provides you with all the information you need to become an effective Grunt power-user. You will quickly learn how to install, configure, and run Grunt. You will go on to understand how to use third-party Grunt and then create your own Grunt tasks that cater to your particular needs....

Mastering Grunt
Daniel Li
Grunt.js continues to excel as the build automation tool of choice. Along with its support for many third-party technologies, Grunt is packaged with a clean API for defining tasks. This powerful tool can streamline your workflow by automating the preparation tasks for production, such as compression, compilation, obfuscation, testing, and even pushing your web application live. This book will teach you how to master build automation and testing with Grunt. You will have the opportunity to utiliz...
1 réponse
[…] nous pouvons le voir dans l’article Les automatiseurs de tâches il existe un grand nombre d’outils nous permettant d’automatiser un certain nombre de […]