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
-
Install
candy-box
:$ npm i candy-box
-
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 } } } } }
-
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 } }; };
-
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.