1.5.7 • Published 7 years ago
register-autoload v1.5.7
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