1. dynamic-dedupe
Dedupes node modules as they are being required which works even when dependencies are linked via ln -s or npm link.
dynamic-dedupe
Package: dynamic-dedupe
Created by: thlorenz
Last modified: Thu, 16 Jun 2022 02:33:04 GMT
Version: 0.3.0
License: MIT
Downloads: 4,063,355
Repository: https://github.com/thlorenz/dynamic-dedupe

Install

npm install dynamic-dedupe
yarn add 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.

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

Dependencies

RELATED POST

10 Must-Know Windows Shortcuts That Will Save You Time

10 Must-Know Windows Shortcuts That Will Save You Time

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Navigating AWS Networking: Essential Hacks for Smooth Operation

Navigating AWS Networking: Essential Hacks for Smooth Operation

Achieving Stunning Visuals with Unity's Global Illumination

Achieving Stunning Visuals with Unity's Global Illumination

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code