hardwire

Structured and scalable node.js app container. WORK IN PROGRESS

Usage no npm install needed!

<script type="module">
  import hardwire from 'https://cdn.skypack.dev/hardwire';
</script>

README

Hardwire

Work in progress

Structured and scalable node.js app container

(if you are looking for the CMS check JetKit)

Features

  • Scalable architecture structured in blocks and plugins
  • Tree based dependency container
  • Build system
  • Boilerplate generator
  • Environment oriented configurations loader
  • Add .env file content to environment variables
  • Environment variables processor

Instructions

Coming soon

Express - MongoDB example

var Hardwire = require('hardwire'),
    express = require('express'),
    mongoose = require('mongoose');

var hardwire = new Hardwire({
    output: 'output/build',

    // folders to build in every block
    buildFolders: ['public', 'views'],

    // default config
    config: {port: 3000},

    // force load production environment
    environment: 'production',

    // rules for adding environment variables into config
    envProcessing: {
        // this will set MONGO_URI value from environment variables
        // into mongodb.uri property of config
        MONGO_URI: 'mongodb.uri'
    },

    // to do before build blocks
    beforeBuild: function (next) {
        // this.config ....
        next();
    },

    // to do after build blocks
    afterBuild: function (next) {
        next();
    },

    // work  with config before load config
    beforeConfig: function (next) {
        // this.config ....
        next();
    },

    // work with config after load config
    afterConfig: function (next) {
        next();
    },

    // work  with tree before load tree
    beforeLoad: function (next) {
        this.tree
        .add( 'express', express )
        .add( 'app', express( ))
        .add( 'mongoose', mongoose )
        .then( next );
    },

    // rules for load every block
    load: function (blockPath, next) {
        this.tree
        .folder( blockPath + '/lib', {
            hidden: true
        })
        .folder( blockPath + '/models', {
            group : 'models',
            suffix: 'Model'
        })
        .folder( blockPath + '/controllers', {
            group : 'control',
            suffix: 'Ctrl'
        })
        .folder( blockPath + '/routes', {
            group: 'router',
            suffix: 'Router'
        })
        .then( function () {
            next();
        });
    },

    // work with tree after load tree
    afterLoad: function (next) {
        next();
    },

    // to do after resolve tree
    // afterAll catch all middleware errors
    afterAll: function (err) {
        if (err) { throw err;}
        var app = this.tree.get( 'app' ),
            http = require('http');
        http.createServer( app ).listen( this.config.port );
        console.log( 'listening port ' + this.config.port );
    }

});

// resolve framework
hardwire.resolve();




© 2015 Jacobo Tabernero - jacoborus

Released under MIT License