Kraeve (pronounced "Crave") is an NPM module that solves the problem of ugly or
complicated require()
paths in deeply nested or highly structured node
projects. When developing a Node application (or library), every file in the
project must be aware of the location of all of its dependencies.
Given a project, named "my-project"
(in package.json), you may have a
folder structure that looks something like this:
./my-project/tests/database/models/article.js
./my-project/lib/database/models/article.js
./my-project/lib/database/models/category.js
Require Article from the Category Model
const Article = require('./article');
Require Article from the Article Test
const Article = require('../../../lib/database/models/article');
This is inconvenient, difficult to keep track of, and closely ties your application's code to the folder structure. If you are ever forced to restructure your application, updating the relative paths becomes a chore as you are forced to rebuild the relative paths for your application.
With Kraeve, require()
treats your application as if it were a module:
Require Article from Any Location
const Article = require('my-project/lib/database/models/article');
Add Pseudo-Modules
// Add a module relative to the project
require('kraeve').set('my-project-lib', './lib');
// Optionally, specify a module-name to read from
require('kraeve').set('my-project-etc', './etc', 'kraeve');
Kraeve works on the top-level folder for an application, so it can be installed
as a dependency without breaking other projects. If your project is included as
a module another application, Node will find it in the node_modules
folder, anyway. Plus, there's no configuration so you don't need to worry about
other projects overwriting your dependencies!
You can start benefiting from Kraeve in three steps:
-
Create a
package.json
. You probably already have this, but make sure your project doesn't have the same name as any of your dependencies!npm init
-
Install Kraeve with NPM Package Manager:
npm install --save kraeve
-
Include Kraeve early in your program's entry-point:
require('kraeve');
And that's it! Kraeve is now installed on your project!
Kraeve is open-source software licensed under the MIT License