candy-box

0.0.6 • Public • Published

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.

Readme

Keywords

Package Sidebar

Install

npm i candy-box

Weekly Downloads

0

Version

0.0.6

License

MIT

Unpacked Size

107 kB

Total Files

25

Last publish

Collaborators

  • leaf4monkey