Table des matières

Node

A voir

http://www.js-attitude.fr/2014/09/22/libs-javascript-front/

top-10-mistakes-node-developers-make

grunt “The Javascript Task Runner”

JS Attitude

npm

Node Package Manager

Au 11/12/2016 le site npm propose plus de 350.000 packages !

Affichage de la liste des packages globaux

npm list -g –depth=0

Affichage de la liste des packages locaux

npm list –depth=0

install nodejs

https://nodesource.com/blog/installing-node-js-tutorial-using-nvm-on-mac-os-x-and-ubuntu/

express

express “Fast, unopinionated, minimalist web framework”

Framework de base pour un projet web.

nodemon

Nodemon is a utility that will monitor for any changes in your source and automatically restart your server. Perfect for development.

http://nodemon.io/

Voir aussi : forever

reloadify

reloadify encapsule chokidar

Magique: Permet au server de demander au client de recharger une page quand une vue change.

Pour cela il utilise inject-html

var app = express();
// .....
var reloadify = require('reloadify')([path.join(__dirname, 'views'), path.join(__dirname, 'less')]);
app.use(reloadify);
// plus loin, après le démarrage du server
// serve an empty page that just loads the browserify bundle
app.get('/', function(req, res) {
  res.render('home');
});

debug

debug Assez basique, mais efficace.

Dans un module :

var debug = require('debug')('mon-module');
.....
debug('myvar: '+myvar);
.....

Pour activer/désactiver le debug des modules depuis un shell:

export DEBUG='mon-module, mon-autre-module....'

pug (former jade)

pug (replace jade)

Template language exemple :

doctype html
html(lang="en")
  head
    title= pageTitle
    script(type='text/javascript').
      if (foo) bar(1 + 5)
  body
    h1 Pug - node template engine
    #container.col
      if youAreUsingPug
        p You are amazing
      else
        p Get on it!
      p.
        Pug is a terse and simple templating language with a
        strong focus on performance and powerful features.

Tests

mocha

mocha “Mocha is a feature-rich JavaScript test framework running on Node.js and in the browser, making asynchronous testing simple and fun.”

//............
"scripts": {
   "start": "node app",
   "test": "mocha"
},
//............
var assert = require('assert');
describe('Array', function() {
  describe('#indexOf()', function() {
    it('should return -1 when the value is not present', function() {
      assert.equal(-1, [1,2,3].indexOf(4));
    });
  });
});
> npm test

chai

chai “Chai is a BDD / TDD assertion library for node and the browser that can be delightfully paired with any javascript testing framework.”

Sinon

sinon “Standalone test spies, stubs and mocks for JavaScript. No dependencies, works with any unit testing framework.”

npm sinon

couverture de tests

istambul “a JS code coverage tool written in JS”

karma “Spectacular Test Runner for JavaScript. ” utilise istanbul

underscore

underscorejs origine: CoffeeScript et Backbone

Utilitaire général : A voir

logger: bunyan

bunyan

Exemple:

var bunyan = require('bunyan');
global.log = bunyan.createLogger({
   name: 'GaGaZ',
   streams: [{
      level: 'info',
      type: 'rotating-file',
      path: __dirname+'/log/app.log',
      period: '1d',   // daily rotation
      count: 3        // keep 3 back copies
   },
   {
      level: 'error',
      type: 'rotating-file',
      path: __dirname+'/log/app-errors.log',
      period: '1d',   // daily rotation
      count: 3        // keep 3 back copies
   }]
});

//.............................................
log.trace('hi on trace');   // Level 10
log.debug('hi on debug');   // Level 20 
log.info('hi on info');     // Level 30
log.warn('hi on warn');     // Level 40
log.error('hi on error');   // Level 50
log.fatal('hi on fatal');   // Level 60

browserify

http://browserify.org/

Browserify lets you require('modules') in the browser by bundling up all of your dependencies.

async & co

Divers outils qui permettent de mieux maitriser les problématiques asynchrones.

async Async is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript.

'use strict';
var async = require("async");

function makeLoopFunction(label, val) {
	return function(callback) {
		// console.log(label+val);
		return callback(null, {'val': val, 'label': label});
	};
}

function done (err, result) {
	console.log('cbk done: '+result.length);
	console.log(result);
}

var funcs = [];
for(var i = 0; i < 3; i++) {
	funcs.push(makeLoopFunction('test 5: ', i));
}
async.parallel(funcs, done);
// cbk done: 3
// [ { val: 0, label: 'test 5: ' },
//   { val: 1, label: 'test 5: ' },
//   { val: 2, label: 'test 5: ' } ]

co generator async control flow goodness

bluebird est une implementation des 'promise' javascript.

'use strict';
var Promise = require('bluebird');

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
    	console.log('sleep: '+milliseconds);
    	return milliseconds;
    }
  }
}

Promise.all([sleep(30), sleep(60)])
.then(function(res){
	console.log(res);
});
// sleep: 30
// sleep: 60
// [ 30, 60 ]

Desktop app

Electron vs NW.js

Child Process

Permet d'exécuter des commandes systèmes.

https://medium.freecodecamp.org/node-js-child-processes-everything-you-need-to-know-e69498fe970a

PM2: production process manager for Node.js

http://pm2.keymetrics.io/