开发者社区> 镜像站> NPM> dynamic-dedupe
dynamic-dedupe
Dedupes node modules as they are being required which works even when dependencies are linked via ln -s or npm link.
Last updated 3 years ago by thlorenz .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install dynamic-dedupe 
SYNC missed versions from official npm registry.

dynamic-dedupe

Dedupes node modules as they are being required which works even when dependencies are linked via ln -s or npm link.

Not deduped

Loads foo.js module only twice.

var foo1 = require('./pack1/common/dep-uno/foo');
var foo2 = require('./pack2/common/dep-uno/foo');

console.log(foo1.foo);
console.log(foo2.foo);

console.log(foo1 === foo2);

// =>
// loading foo from /Users/thlorenz/dev/projects/dynamic-dedupe/example/pack1/common/dep-uno
// loading foo from /Users/thlorenz/dev/projects/dynamic-dedupe/example/pack2/common/dep-uno
// foobiloo
// foobiloo
// false

Deduped

Loads foo.js module only once.

var dedupe = require('../');
dedupe.activate();

var foo1 = require('./pack1/dep-uno/foo');
var foo2 = require('./pack2/dep-uno/foo');

console.log(foo1.foo);
console.log(foo2.foo);

console.log(foo1 === foo2);

// =>
// loading foo from /Users/thlorenz/dev/projects/dynamic-dedupe/example/pack1/common/dep-uno
// foobiloo
// foobiloo
// true

Here instead of loading pack2/dep-uno/foo1.js we will get a reference to the exports of pack1/dep-uno/foo.js` returned.

Why?

In some cases an app may be split into multiple parts that need to get the same instance of a common dependency (i.e. Handlebars). This will work once you run npm dedupe from the main package. However once you try linking to a dependency via npm link or just ln -s it breaks.

This is where dynamic-dedupe comes in since it dedupes your modules as they are being required. Just make sure that you are using the exact same version of the packages whose modules you dedupe in order for this to work reliably.

Installation

npm install dynamic-dedupe

API

###dedupe.activate([ext, subdirs])

/**
 * Activates deduping for files with the given extension.
 * 
 * @name activate
 * @function
 * @param ext {String} (optional) extension for which to activate deduping (default: '.js')
 * @param subdirs {Number} (optional) how many subdirs right above the module
 *    have to be the same in order for it to be considered identical  (default: 2)
 *
 *  Example: sudirs: 2 -- x/foo/bar/main.js === y/foo/bar/main.js
 *                        x/boo/bar/main.js !== y/foo/bar/main.js
 */

###dedupe.deactivate([ext])

/**
 * Deactivates deduping files with the given extension.
 * 
 * @name deactivate
 * @function
 * @param ext {String} (optional) extension for which to activate deduping (default: '.js')
 */

###dedupe.reset()

/**
 * Clears the registry that contains previously loaded modules.
 * 
 * @name reset
 * @function
 */

License

MIT

Current Tags

  • 0.3.0                                ...           latest (3 years ago)

4 Versions

  • 0.3.0                                ...           3 years ago
  • 0.2.0                                ...           7 years ago
  • 0.1.1                                ...           7 years ago
  • 0.1.0                                ...           7 years ago
Maintainers (1)
Downloads
Today 0
This Week 947
This Month 779
Last Day 157
Last Week 1,053
Last Month 4,414
Dependencies (1)
Dev Dependencies (2)