N

Node-scaffolder

public
 

Scaffolder NodeJS, Express, Sequelize (rimpiazzabile con un ORM NoSQL in pochi minuti), MySQL, basato sul generatore "express" (https://github.com/petecoop/generator-express). Se si usa nvm, nel repo c'è il file nascosto ".nvmrc" che attiva la corretta versione di NodeJS (se installata). Allo stato attuale la versione è la 6.2.2, quindi si suggerisce di utilizzare sintassi ES2015/ES6. Il codice è strutturato in MVC, all'interno della cartella app. Le rotte sono in una cartella routes in app. Eventuali file di frontend vanno messi in assets. Installa tutte le dipendenze con npm e modifica il gulpfile a piacimento. Uno scheletro è già incluso. Ricordati di modificare il file config/local.js con le tue configurazioni locali e mettilo in gitignore, così da non avere conflitti con le configurazioni di chi lavora con te. Va installato globalmente gulp

npm install -g gulp
npm install

Il gulp task "scripts" è il più delicato. Serve a comporre i js frontend con le loro dipendenze. Browserify si aspetta tutte le dipendenze come moduli. Anche se molte dipendenze sono moduli, vedi jQuery, e possono essere importati con:

import jQuery from 'jquery';

altre dipendenze, vedi Bootstrap, non espongono moduli. In quel caso le alternative sono:

  • togliere browserify dal gulpfile
  • workaround

Il workaround per includere bootstrap (ed è identico per ogni altro non modulo) in un file js frontend dove serve è:

window.$ = window.jQuery = jQuery;
var Bootstrap = require('bootstrap-sass');
Bootstrap.$ = window.$;
require('bootstrap-sass/assets/javascripts/bootstrap');

Questo perché bootstrap dipende da jQuery, ma non essendo un modulo browserify non riesce a mostrare a bootstrap che jQuery è correttamente incluso e bootstrap segnala la mancanza di jQuery.

Si suggerisce di utilizzare pm2 per controllare i processi sui server in fase di deploy. Nel package.json ci sono anche i task per il deploy. E' sufficiente installare pm2 sul server:

npm install -g pm2

Se si è dietro NGINX, va creato un proxy che deve passare le richieste su una specifica porta, che è quella che viene definita nei file config/pm2/staging.json e config/pm2/production.json, come mostrato qua: http://pm2.keymetrics.io/docs/tutorials/pm2-nginx-production-setup

Nei task "start*" viene incluso il supporto alle migrazioni sequelize (http://docs.sequelizejs.com/en/latest/docs/migrations/) Ricordati di creare la cartella migrations/ sul server. Per lanciare le migrazioni in locale:

npm install -g sequelize-cli
sequelize db:migrate --config=config/migrations.json

Non viene incluso nessun framework frontend, che può tuttavia essere incluso a piacimento.

E' stato aggiunto uno scheletro per i test. Si richiede l'installazione di Mocha come test runner (ma può essere usato anche altro, tipo Jasmine):

npm install -g mocha

I file dei test, strutturati a piacimento, vanno messi nella cartella tests/. Nel file di esempio viene importato Chai come libreria di assertion, ma è rimpiazzabile con quella che si preferisce. Per lanciare i test manualmente:

mocha tests --recursive --watch

I test automatici a runtime verranno aggiunti a breve (forse, potrebbe aver senso tenerli a livello di CI).