npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

multidep

v2.0.2

Published

Install and require multiple versions of the same npm package for testing

Downloads

622

Readme

node-multidep

Install and require multiple versions of a package via npm, like so:

var broccoli0 = multidepRequire('broccoli', '0.16.3');
var broccoli1 = multidepRequire('broccoli', '1.0.0');

This is useful for integration testing. It's perhaps not robust enough for production code.

Installation

npm install --save-dev multidep

Usage

Specifying which versions to install

Create a JSON spec of packages to be installed, e.g. at test/multidep.json:

{
  "path": "test/multidep_modules",
  "versions": {
    "broccoli": ["0.16.3", "1.0.0"]
  }
}

Do not use fuzzy versions ("^0.16.0") - this will cause problems.

Installing the packages from npm

Next, run

./node_modules/.bin/multidep test/multidep.json

In this example, it will create test/multidep_modules and install broccoli 0.16.3 and broccoli 1.0.0 somewhere inside the test/multidep_modules directory.

To run multidep automatically before your test suite (when you run npm test), add it as a "pretest" hook to your package.json:

{
  "scripts": {
    "pretest": "multidep test/multidep.json",
    "test": "..."
  }
}

multidep will not redownload existing packages. If something went wrong, delete its directory first: rm -r test/multidep_modules

multidepRequire: Requiring specific package versions

You can now require the different versions like so:

var multidepRequire = require('multidep')('test/multidep.json');

var broccoli0 = multidepRequire('broccoli', '0.16.3');
var broccoli1 = multidepRequire('broccoli', '1.0.0');

Note that test/multidep.json is relative to the current working directory. This is typically your project root.

multidepRequire.forEachVersion: Iterating over all versions

To iterate over each version, use the .forEachVersion helper method.

multidepRequire.forEachVersion('broccoli', function(version, broccoli) {
  // Do stuff with the `broccoli` module
});

Testing against the master branch

Sometimes it's useful to test against your local checkout of a package. To facility this, there is a special 'master' version for each package whose presence is detected automatically, without being specified in multidep.json.

First, symlink your checkout to <path>/<package>-master, e.g.

ln -s ~/src/broccoli test/multidep_modules/broccoli-master

Then, try to require it. If it's not present (for example on a CI server), you will get null, rather than an exception:

var multidepRequire = require('multidep')('test/multidep.json');

var broccoliMaster = multidepRequire('broccoli', 'master');
if (broccoliMaster !== null) {
  // Do stuff
}

The multidepRequire.forEachVersion function also includes the 'master' version automatically when it's present.