Upload
gelnior
View
494
Download
2
Embed Size (px)
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 <[email protected]>", "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 <[email protected]>", "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 <[email protected]>", "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 <[email protected]>", "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 <[email protected]>", "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 <[email protected]>", "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 [email protected]$ npm install –-save-dev [email protected]$ 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 [email protected]$ npm install –-save-dev [email protected]$ 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 [email protected]$ npm install –-save-dev [email protected] $ 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 "[email protected]"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