Require non-public definitions from node modules.
It is convenient to be able to expose internal module definitions that are not part of the public API without having to create a separate module. A common use case is testing.
Usually this module is only needed for development.
npm install require-from --save-dev
Version 0.10.0
requires passing an additional parameter (module
, see usage
below) to correctly handle relative imports. Users of earlier versions should upgrade.
-
Expose the desired definitions through
module
using a key other thanexports
. e.g.:module.testExports
. -
From another module require the definition through
requireFrom('exports-key', module, 'path-to-module')
. Where'exports-key'
is a string matching the name of the object with the definitions (testExports
above).module
is the Node provided object representing the current module.'path-to-module'
is a path following the Node.js require API.
exporter.js:
module.testExports = 'testExports';
module.exports = 'regular exports';
importer.js:
var requireFrom = require('require-from');
console.log('requireFrom("testExports", module, "./exporter") ->',
requireFrom('testExports', module, './exporter'));
console.log('requireFrom("exports", module, "./exporter") ->',
requireFrom('exports', module, './exporter'));
output:
requireFrom("testExports", module, "./exporter") -> testExports
requireFrom("exports", module, "./exporter") -> regular exports
Define a naming convention and use bind
:
var requireFromTest = require('require-from').bind(undefined, 'testExports', module);
var m1 = requireFromTest('./m1');
var m2 = requireFromTest('./m2');
require-from Copyright 2014 © DEADB17 [email protected]
Distributed under the MIT license.