register-autoload

1.5.7 • Public • Published

register-autoload

require local modules with absolute path for all folder and folder/lib

install

npm install register-autoload --save

use

with the given project structure:

    .
    ├── app
    │   └── test.js
    ├── lib
    │   └── serialGenerator
    │       └── index.js
    ├── index.js
    ├── package.json
    └── node_modules
        └── register-autoload
            ├── package.json
            ├── folders-of-project.js
            └── index.js

you can require this from the app directory:

    // only call this once
    // All Folders of Project
    require('register-autoload')();
 
    // Only folders in project 
    require('register-autoload')(['lib','app']);
    // Outer sintax Only folders in project 
    require('register-autoload')('lib, app');
    //   $project_folder/lib 
    //   $project_folder/app 
 
    // Only folders in project 
    require('register-autoload')(['lib','app'], ['libs']);
    // Outer sintax Only folders in project 
    require('register-autoload')('lib, app', 'libs');
    //   $project_folder/lib/
    //   $project_folder/app/
    //   $project_folder/../libs/
    //   $project_folder/../libs/
    //   $project_folder/../../libs/
    //    ...
    //   /libs/
 
    // Only folders in project 
    require('register-autoload')(['lib','app'], ['libs'], true);
    // Outer sintax Only folders in project 
    require('register-autoload')('lib, app', 'libs', 'true');
    //   $project_folder/lib/ 
    //   $project_folder/app/ 
    //   $project_folder/../libs/ 
    //   $project_folder/../../libs/ 
    //    ...
    //   /libs/ 
    //   $project_folder/../
    //   $project_folder/../../
    //    ...
    //   /
    
    // require from node_modules as usual
    let obj = require('test');
 
    // require from lib with absolute paths
    let obj = require('serialGenerator');
    obj.generate(10000);

problem

require not new locals modules in node can be annoying with relative paths. e.g.

    var modulo = require('../../../lib/modulo');

solution

treat specific application folders like the node_modules folder, so that we can require stuff without ugly relative paths.

sample

$project-folder/index.js

let p = require('register-autoload')('lib, app', 'libs', 'true');
console.log(p);
require('test')();

$project-folder/app/test.js

module.exports = exports = () => {
    let execute = () => {
        var serialGenerator = require('serialGenerator');
        console.log(__dirname, "\n", serialGenerator.generate());
    }
    return execute();
}

$project-folder/lib/serialGenerate/index.js

module.exports.generate = (max = 10000) => {
    return Math.floor(Math.random() * max);
}

OUTPUT: Paths Generated

[Running] node "index.js"

{ PATHS: [ 
     'c:\\Users\\root\\Projetos\\NodeJS_Sistema_de_Modulos\\lib',
     'c:\\Users\\root\\Projetos\\NodeJS_Sistema_de_Modulos\\app',
 
     'c:\\Users\\root\\Projetos\\libs',
     'c:\\Users\\root\\libs',
     'c:\\Users\\libs',
     'c:\\libs',
 
     'c:\\Users\\root\\Projetos',
     'c:\\Users\\root',
     'c:\\Users',
     'c:\\' 
]}
 
// c:\Users\root\Projetos\NodeJS_Sistema_de_Modulos\app 
// 7249

[Done] exited with code=0 in 1.952 seconds

test

tested so far with node 0.8, 0.10, 0.11, 8

inspiration

https://gist.github.com/branneman/8048520

credits

  • @branneman for the great article on this topic
  • @joelabair for the cool hack

Package Sidebar

Install

npm i register-autoload

Weekly Downloads

1

Version

1.5.7

License

MIT

Last publish

Collaborators

  • luisnt