SUW15 – v.36 tisdag – Vår klassbaserade NodeJS App (boilerplate)

Byggd på JavaScript ES6 (klasser) och utformad för att enkelt kunna lägga till nya klasser (features)

Filstruktur

SUW15dev
- bootstrap_less/     # bootstrap LESS
- classes/            # our classes (features)
- less/               # our less
- www/                # webroot
- app.js              # main "app" file
- classLoader.js      # loads all js classes
- nodemon.json        # instruction file for nodemon
- package.json        # lists all modules our node app needs
- settingsConstr.js   # all settings for our app

app.js

Den filen du kör med ”node app.js” eller ”nodemon app.js”. Ansvarar för att ladda alla moduler, inställningar, och klasser som appen behöver.

// globals
m = {}; // all modules
g = {}; // all global variables (ex. settings)

// Require modules
[
  "babel-core/register",
  "babel-polyfill",
  "express",
  "compression",
  "path",
  "fs",
  "serve-favicon",
  "cookie-parser",
  "body-parser",
  "gulp",
  "gulp-less",
  "gulp-clean-css",
  "./settingsConstr",
  "./classLoader"
].forEach(function(x){
  // store required modules in "m"
  m[x.replace(/\W/g,'')] = require(x);
});

// constructs g.settings object
m.settingsConstr();

// loads all classes
m.classLoader();

// start LessWatch
new g.classes.LessWatch();

settingsConstr.js

Anropas inuti app.js. Ansvarar för att deklarera alla inställningar samt lägga in dem på ”g.settings”. Inställningar för en specifik klass läggs under en nyckel döpt efter klassens namn (t.ex ”g.settings.LessWatch”).

// constructs g.settings object
module.exports = function() {
  var appRoot = m.path.normalize(__dirname +'/');

  g.settings = {
    appRoot: appRoot,
    classLoader: {
      baseDir: m.path.join(appRoot,'classes/'),
      toLoad: [
        'LessWatch'
      ]
    },
    LessWatch: {
      paths: {
        watchDirs: [
          './less/**/*.less'
        ],
        lessInput: [
          './less/all.less'
        ],
        cssOutput: './www/css'
      }
    }
  };
};

Grundtanke

När du utvecklar med våran ES6 stack gör du det genom att skapa nya klasser för en specifik feature. Om din klass behöver inställningar lägger du till dem i ”settingsConstr” com i sin tur ser till att de finns tillgängliga i den globala ”g” objektet. Beroende på vad din klass gör kan du sedan antingen instantiera den direkt i app.js eller inuti en annan klass.

Ladda ner

Här kan du ladda ner vår ES6 Node.js stack

0 votes