Home

Awesome

npm-shrinkwrap

(This project is deprecated and not maintained.)

A consistent shrinkwrap tool Note: npm >= 3 is currently not supported.

Usage

$ npm-shrinkwrap

This runs shrinkwrap, which verifies your package.json & node_modules tree are in sync. If they are it runs shrinkwrap then fixes the resolved fields and trims from fields

When you run npm-shrinkwrap it will either:

Motivation

Verify local correctness

We need to verify that package.json, npm-shrinkwrap.json and node_modules all have the same content.

Currently npm verifies most things but doesn't verify git completely.

The edge case npm doesn't handle is if you change the tag in your package.json. npm happily says that the dependency in your node_modules tree is valid regardless of what tag it is.

Consistently set a resolved field.

NPM shrinkwrap serializes your node_modules folder. Depending on whether you installed a module from cache or not it will either have or not have a resolved field.

npm-shrinkwrap will put a resolved field in for everything in your shrinkwrap.

Reduce diff churn

There are a few tricks to ensuring there is no unneeded churn in the output of npm shrinkwrap.

This first is to ensure you install with npm cache clean so that an npm ls output is going to consistently give you the resolved and from fields.

The second is to just delete all from fields from the generated shrinkwrap file since they change a lot but are never used. However you can only delete some from fields, not all.

Human readable diff

When you run shrinkwrap and check it into git you have an unreadable git diff.

npm-shrinkwrap comes with an npm-shrinkwrap diff command.

npm-shrinkwrap diff master HEAD
npm-shrinkwrap diff HEAD npm-shrinkwrap.json --short

You can use this command to print out a readable context specific diff of your shrinkwrap changes.

Custom shrinkwrap validators

npm-shrinkwrap can be programmatically configured with an array of validators.

These validators run over every node in the shrinkwrap file and can do assertions.

Useful assertions are things like assertion all dependencies point at your private registry instead of the public one.

Example

var npmShrinkwrap = require("npm-shrinkwrap");

npmShrinkwrap({
    dirname: process.cwd()
}, function (err, optionalWarnings) {
    if (err) {
        throw err;
    }

    optionalWarnings.forEach(function (err) {
        console.warn(err.message)
    })

    console.log("wrote npm-shrinkwrap.json")
})

Algorithm

npm-shrinkwrap algorithm

npm-shrinkwrap NOTES:

Cli Documentation

npm-shrinkwrap [options]

Verifies your package.json and node_modules are in sync. Then runs npm shrinkwrap and cleans up the npm-shrinkwrap.json file to be consistent.

Basically like npm shrinkwrap but better

Options:
  --dirname           sets the directory location of the package.json
                      defaults to `process.cwd()`.
  --keep-nested       If set, will not remove nested changes.
  --warnOnNotSemver   If set, will downgrade invalid semver errors
                      to warnings
  --dev               If set, will shrinkwrap dev dependencies
  --silent            If set, will be silent.

npm-shrinkwrap --help

Prints this message

npm-shrinkwrap sync

Syncs your npm-shrinkwrap.json file into the node_modules directory.

This will ensure that your local node_modules matches the npm-shrinkwrap.json file verbatim. Any excess modules in your node_modules folder will be removed if they are not in the npm-shrinkwrap.json file.

Options: --dirname sets the directory of the npm-shrinkwrap.json

npm-shrinkwrap install

Will write a shrinkwrap script to your package.json file.

{
    "scripts": {
        "shrinkwrap": "npm-shrinkwrap"
    }
}

Options: --dirname sets the directory location of the package.json

npm-shrinkwrap diff [OldShaOrFile] [NewShaOrfile]

This will show a human readable for the shrinkwrap file.

You can pass it either a path to a file or a git shaism.

Example:

npm-shrinkwrap diff HEAD npm-shrinkwrap.json
npm-shrinkwrap diff origin/master HEAD
Options:
    --depth     configure the depth at which it prints
    --short     when set it will print add/remove tersely
    --dirname   configure which folder to run within

Installation

For usage with npm@2

npm install npm-shrinkwrap

For usage with npm@1

npm install npm-shrinkwrap@100.x

Note: npm >= 3 is not supported.

Tests

npm test

Contributors