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 ; // Only folders in project 'lib''app'; // Outer sintax Only folders in project 'lib, app'; // $project_folder/lib // $project_folder/app // Only folders in project 'lib''app' 'libs'; // Outer sintax Only folders in project 'lib, app' 'libs'; // $project_folder/lib/ // $project_folder/app/ // $project_folder/../libs/ // $project_folder/../libs/ // $project_folder/../../libs/ // ... // /libs/ // Only folders in project 'lib''app' 'libs' true; // Outer sintax Only folders in project '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 from lib with absolute paths let obj = ; obj;
problem
require not new locals modules in node can be annoying with relative paths. e.g.
var 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 = 'lib, app' 'libs' 'true';console;;
$project-folder/app/test.js
moduleexports = { let { var serialGenerator = ; console; } return ;}
$project-folder/lib/serialGenerate/index.js
moduleexports { return Math;}
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