0.0.6 • Published 6 years ago

candy-box v0.0.6

Weekly downloads
3
License
MIT
Repository
github
Last release
6 years ago

Candy-Box

Manage your modules classify, and provide Dependency Injection for them.

Features

  • Auto load the modules in the directories you assign.

  • Provide DI for the registered modules.

  • Prevent the registered modules to be retrieved directly.

Get Started

  1. Install candy-box:

    $ npm i candy-box
  2. Write your configs in a candyboxrc.json:

    candyboxrc.json:

    {
      "injectSelf": true, // Inject itself to the modules of a provided context, default `true`.
      "camelCaseKey": true, // Change name of module and context to be "camelCase", default `true`.
      "capitalizeInitial": { // Capitalize the initial letter of a name, only active when `camelCaseKey` is true, default `true`.
        "module": true, // Active on module name, default `true`.
        "contextKey": true // Active on context name, default `true`.
      },
      "oneWayDependency": true, // One-way dependencies, default `true`.
      "context": {
        "./path/to/dir1": {
          "injectSelf": false, // Rewrite `config.injectSelf` locally.
          "camelCaseKey": true, // Rewrite `config.camelCaseKey` locally.
          "capitalizeInitial": true, // Rewrite `config.capitalizeInitial` locally.
          "name": "DAOs" // Rewrite the context name.
          // "dependencies": ["Dir2"], // Illegal dependencies.
        },
        "./path/to/dir2": {
          "dependencies": ["Dir1"],
          "skip": ["Module2"], // Skip loading the assigned modules.
          "childrenConfigs": {
            "User": {
              "dependencies": ["Dir1.Module1"],
              "mergeDependencies": false
            }
          }
        }
      }
    }
  3. Define your modules in the directories you assigned in configs, for example:

    dir1/module1.js:

    module.exports = ctx => {
        let Dir1;
        ctx.onInitialized(() => {
            Dir1 = ctx.Dir1; // Yes, you can get the modules under the "dir1".
        });
        return {
            fn () {
                // your bussiness code.
                return 'dir1/module1';
            }
        };
    };

    dir2/module1.js:

    // const Dir1Module1 = require('path/to/dir1/module1'); // Cannot get the correct module.
    
    module.exports = ctx => {
        let Dir1;
        ctx.onInitialized(() => {
            Dir1 = ctx.Dir1;
        });
        return {
            fn () {
                // your bussiness code.
                console.log(Dir1.Module1.fn()); // dir1/module1
            }
        };
    };
  4. Load your configs on starting up.

    startup.js

    const loader = require('candy-box');
    const path = require('path');
    
    loader(path.resolve('.')); // Assume you `candyboxrc.json` file is in the current path.
0.0.6

6 years ago

0.0.5

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago