Install multiple versions of NPM packages at runtime. Use any semver ranges which are also a valid (Li|U)nix directory
names as your version and require them intuitively (e.g. require('ramda@0.23.x'), require('ramda@~0.22.1'),
require('ramda@latest')). Leverage custom invalidators to automatically keep installed packages up-to-date.
$ npm install --save multi-tool
$ # OR
$ yarn add multi-toolAn options object is required to configure before using, only path is required.
const options = {
// Path to install against
path: 'node_modules',
// Function used to determine if package should be invalidated and reinstalled when already installed
invalidate: (name, version, age) => age >= Number.MAX_SAFE_INTEGER,
// Milliseconds to delay when an install is already occurring before reattempting
delay: 2500,
// Milliseconds maximum to delay before an install is considered failed if an install is already occurring
timeout: 60000
};
const install = require('multi-tool')(options);const installed = await install('ramda', 'latest');
const R = require('ramda@latest');
R.identity(0);const installed = await install('ramda', '0.23.0');
const R = require('ramda@0.23.0');
R.identity(0);const installed = await install('ramda', '0.23.x');
const R = require('ramda@0.23.x');
R.identity(0);const installed = await install('ramda', '~0.22.1');
const R = require('ramda@~0.22.1');
R.identity(0);const installed = await install('ramda', '^0.22.1');
const R = require('ramda@^0.22.1');
R.identity(0);const installed = await install('package-doesnt-exist', 'latest');const installed = await install('ramda', '99.99.99');It is possible to use custom invalidators to customize when multi-tool should assume an already successfully
installed package should be reinstalled. This is accomplished via a higher-order function passed as an argument upon
require. The invalidator function is executed upon each install. The invalidator function is provided the package
name, the package version, and how many milliseconds ago the package at hand was last successfully installed.
The invalidator function should return a Boolean value which when true will invalidate the previously successfully
installed package and reinstall. The default invalidator behavior is to always invalidate.
const invalidate = (name, version, age) => age >= 0;
const install = require('multi-tool')({path: 'node_modules', invalidate});const invalidate = (name, version, age) => age >= Number.MAX_SAFE_INTEGER;
const install = require('multi-tool')({path: 'node_modules', invalidate});const invalidate = (name, version, age) => version === 'latest' && age >= 600000;
const install = require('multi-tool')({path: 'node_modules', invalidate});- Rocky Madden (@rockymadden)