require-from v0.10.0
require-from
Require non-public definitions from node modules.
Motivation
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.
Installation
Usually this module is only needed for development.
npm install require-from --save-dev
Notice to 0.9.x users
Version 0.10.0 requires passing an additional parameter (module, see usage
below) to correctly handle relative imports. Users of earlier versions should upgrade.
Usage
- Expose the desired definitions through
moduleusing 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 (testExportsabove).moduleis the Node provided object representing the current module.'path-to-module'is a path following the Node.js require API.
Sample
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 exportsTip
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 DEADB17@gmail.com
Distributed under the MIT license.