@aminya/group-dependencies

Allows for specifying specific non-production packages to install, for use in an environment that only installs production variables ie; heroku.

Usage no npm install needed!

<script type="module">
  import aminyaGroupDependencies from 'https://cdn.skypack.dev/@aminya/group-dependencies';
</script>

README

group-dependencies

CircleCI npm version

With group-dependencies, you can group your dependencies in different batches. For exmaple, you can have a "buildDependencies" or "lintDependencies". This is very useful when you don't need to install all the dependencies for a certain task. Using this you can save a lot of time in CI.

For example, put build dependencies in a separate property, buildDependencies, and install only those packages as needed, by adding to "scripts": { "heroku-postbuild": deps install build" } to your package.json.

Installation

You need to install this package globally, if you want to use it on a clean directory:

npm install @aminya/group-dependencies -g

Usage

First, add a new dependencies group to package.json:

{
  ...
  "devDependencies": {
    "intercept-stdout": "^0.1.2",
    "jest": "^20.0.4",
    "strip-color": "^0.1.0"
  },
  // our new group representing testing dependencies
  "testDependencies": [
    "jest"
  ]
  ...
}

Now you can install only the dependencies for this new group:

# This will install jest@^20.0.4:
deps install test

Command

# Install dependencies in the named group
deps install [GROUP_NAME]

Why

npm gives you two groups to specify dependencies (i.e. dev and prod). In the real world, we have multiple dependency environments (e.g. test, build, production, development).

How it works

Any item added to the [GROUP_NAME]Dependencies property will be installed with deps install [GROUP_NAME]. If a matching package is found in devDependencies or dependencies, that version will be installed.

// Here's the part that matters.
"buildDependencies": [
  "webpack",
  "@babel/preset-env"
]

The decision to use this strategy, with an array, was made so that we can leverage a few things.

  1. In your development environment, let npm manage installing your dev dependencies.
  2. You only need to manage package versions in one location, reducing the overhead.

Behind the scenes, it makes a new package.json, and then uses that for installation. Once the installation is done, it restores the original package.json.

It is also capable of using group-specific lock files, which can speed up the installation process.