smart-require
Avoid ugly require('../../../some-file')
using absolute paths, from
the root of your project.
This package follows the well-known UNIX convention where /
is the
root.
For example, in this source tree:
.
├── index.js
├── image
│ ├── gif.js
│ ├── jpg.js
│ └── png.js
└── video
└── mp4.js
…if you’re in image/gif.js
, this package allows you to require
video/mp4.js
like this:
const video = require('/video/mp4.js')
…instead of:
const video = require('../video/mp4.js')
Of course, it prohibits you to require anything from the root of your
system (but why doing so?). Since the behavior of require()
changes,
this is not really safe, even if I never had any problem with it. Use
at your own risk.
Installation
yarn add smart-require
…or:
npm install --save smart-require
Then, you just have to indicate your project root before any call to
the customized require
, usually at the beginning of your
entrypoint. If you are in index.js
in the example above, you can
write:
require('smart-require')(__dirname)
…or if your entrypoint is in image/jpeg.js
and you want the same
behavior:
const root = require('path').join(__dirname, '..')
require('smart-require')(root)
See also
require-root, nice but different.