Node.js et NPM: de la récupération de dépendances à la publication de paquets

Preview:

DESCRIPTION

Une présentation sur le cycle de vie d'un module Node.js. Dans cette présentation on apprend comment utiliser NPM pour bien décrire son projet et ses dépendances. Puis on apprend comment préparer et publier son projet. Présentation faite à Solution Linux 2014. http://www.solutionslinux.fr/

Citation preview

Node.js et NPMDe la gestion de dépendances à la publication de packages

NodeJS

- Environnement d'exécution asynchrone- Basé sur V8 - Permet d'utiliser Javascript côté serveur- Mais surtout ...

Une communauté très active ! 

NPM

- Gestionnaire de paquets (Equivalent de pip en python ou gem en Ruby)- Registry (annuaire, moteur de recherche)- Basé sur un manifeste (package.json)

{ "name": "americano", "version": "0.1.0", "description": "Express simplifié !", "author": "Frank Rousseau <frank@cozycloud.cc>", "dependencies": { "colors": "0.x.x", "express": "3.3.x", "commander": "2.3.1", "printit": "0.2.x" }, "devDependencies": { "mocha": "0.5.x" }, "engine": "node >= 0.4.1"}

Dépendances

{ "name": "americano", "version": "0.1.0", "description": "Express simplifié !", "author": "Frank Rousseau <frank@cozycloud.cc>", "dependencies": { "colors": "0.x.x", "express": "3.3.x", "commander": "2.3.1", "printit": "0.2.x" },, "devDependencies": { "mocha": "0.5.x" }, "engine": "node >= 0.4.1"}

{ "name": "americano", "version": "0.1.0", "description": "Express simplifié !", "author": "Frank Rousseau <frank@cozycloud.cc>", "dependencies": { "colors": "0.x.x", "express": "3.3.x", "commander": "2.3.1", "printit": "0.2.x" }, "devDependencies": { "mocha": "0.5.x" }, "engine": "node >= 0.4.1"}

npm install [--production]

npm install --save colors

npm install -g express

Récupération

# affiche l'arbre des

# dépendances npm ls

# affiche les dépendances # obsolètes npm outdated

# Génère les dépendances # manquantes

pakmanager deps

packages NPM utiles

Très populaires

- ExpressJS/Sails/Americano (framework web)- Request/Request-json (requêtage simplifié)- Underscore/Lodash (utilitaires tableaux)- Commander/Optimist/Nopt (parsers d'arguments)- Jade (moteur de template)- Moment (date)- Stylus (pré-processeur CSS)

Populaires

- Cheerio (scraping)- Through (gestion de flux)- Glob (recherche de fichiers)- Rimraf/fs-extra (rm -rf, add-on file-system) - Shelljs (Bash dans node)- Chalk (coloration sortie console)

Build

bin/americanotests/tests.coffeeCakefileREADMEmain.coffeepackage.json

bin/americanotests/tests.coffeeCakefileREADMEmain.coffeemain.jspackage.json

Objectif

compilation des sources+ raccourci pour les tests+ identification du binaire

{ "name": "americano", "version": "0.1.0", "description": "Express simplifié !", "author": "Frank Rousseau <frank@cozycloud.cc>", "dependencies": { "colors": "0.x.x", "express": "3.3.x", "commander": "2.3.1", "printit": "0.2.x" }, "devDependencies": { "mocha": "0.5.x" }, "engine": "node >= 0.4.1", "main": "./main.js", "scripts": { "prepublish": "cake build", "test": "cake tests" }, "bin": { "americano": "./bin/americano" }}

{ "name": "americano", "version": "0.1.0", "description": "Express simplifié !", "author": "Frank Rousseau <frank@cozycloud.cc>", "dependencies": { "colors": "0.x.x", "express": "3.3.x", "commander": "2.3.1", "printit": "0.2.x" }, "devDependencies": { "mocha": "0.5.x" }, "engine": "node >= 0.4.1", "main": "./main.js", "scripts": { "prepublish": "cake build", "test": "cake tests" <= $ npm test }, "bin": { "americano": "./bin/americano" }}

{ "name": "americano", "version": "0.1.0", "description": "Express simplifié !", "author": "Frank Rousseau <frank@cozycloud.cc>", "dependencies": { "colors": "0.x.x", "express": "3.3.x", "commander": "2.3.1", "printit": "0.2.x" }, "devDependencies": { "mocha": "0.5.x" }, "engine": "node >= 0.4.1", "main": "./main.js", "scripts": { "prepublish": "cake build", "test": "cake tests" }, "bin": { "americano": "./bin/americano" }}

Outils de build

- Grunt- Cake- Gulp- Broccoli

Grunt - Gruntfile$ npm install -g grunt-cli$ npm install –-save-dev grunt@0.4.4$ npm install –-save-dev grunt-contrib-coffee@0.10.0$ grunt

module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), coffee: { compile: { files: { './main.js': './main.coffee' }}}});

grunt.loadNpmTasks('grunt-contrib-coffee'); grunt.registerTask('default', ['coffee']);};

Cake - Cakefile$ npm install -g coffee-script$ cake build

task "build", "Compile coffee files to JS", ->

console.log "Compile main file..." command = "coffee -c main.coffee" exec command, (err, stdout, stderr) -> if err console.log "Error: \n #{err}" process.exit 1 else console.log "Compilation succeeded."

Gulp - Gulpfile.js$ npm install -g grunt-cli$ npm install –-save-dev gulp@3.6.2$ npm install –-save-dev gulp-coffee@1.4.3$ gulp

var gulp = require('gulp');var coffee = require('gulp-coffee');

gulp.task('scripts', function() { return gulp.src(['./main.coffee']) .pipe(coffee()) .pipe(gulp.dest('./'));});

gulp.task('default', ['scripts']);

Broccoli – Brocfile.js$ npm install -g broccoli$ npm install –-save-dev broccoli@0.12.0$ npm install –-save-dev broccoli-coffee@0.1.0 $ brocoli build ./build

var filterCoffeeScript = require('broccoli-coffee');

module.exports = filterCoffeeScript('src', {});

Publication

npm set init.author.name "Votre nom"npm set init.author.email "vous@exemple.fr"npm set init.author.url "http://votresite.fr"

npm adduser

Enregistrement

npm version [patch|minor|major]

Up de version

npm publish

Apprenez Node.js avec Cozy ! 

http://cozy.io/hack/getting-started/

@mycozycloudcozy.io

Recommended