requirishrequirish is a tool for avoiding the ../../../ relative paths problem and includes a browserify-transform to rewrites the require() for browser.
You can use it both for your application and also if you are writing a library that could be referenced by others as dependency!
$ npm install --save requirish
UsageIn the code, before other require() calls:
As a browserify-transform:
$ browserify -t requirish app.js > bundle.js
ExampleDeveloping a not trivial Node.js application/library you will face a lot of annoying relative paths in your require() as soon as you start creating a module hierarchy under your ./lib source folder.
Your application, in this example, could have a 'jet.js' module like the following:
and the relative unit-test with the following path:
Therefore, your 'jet.test.js' unit-test could begin like this:
var jetController = require('../../../lib/gui/controller/jet'); ...
In such a case, browserify could resolve this long require() without any problem..
But, how to avoid using the ../../../ relative path to find the 'jet.js' module?
Well, you could write the
require('requirish')._(module);statement - only one time for each module and before other require() - like the following:
Fine! We will be happy to have now a path-decoupled require() but..
require('requirish')._(module); var jetController = require('lib/gui/controller/jet'); ...
browserify will stop to resolve this new smart version!
And here requirish comes again to the rescue and transforms automagically all the smart require() in the previous ../../../ long version only for the browserify processor!
So, you could run the following browserify command adding the transform:
$ browserify -t requirish test/gui/controller/jet.test.js > test-bundle.js
Now, you will get a bundle that runs on browser without problem! :)