Skip to content
This repository has been archived by the owner on Aug 11, 2022. It is now read-only.

Commit

Permalink
shrinkwrap: npm shrinkwrap --dev means prod too
Browse files Browse the repository at this point in the history
Due to 448efd0, running `npm shrinkwrap
--dev` caused production dependencies to no longer be included in
npm-shrinkwrap-.json. Whoopsie! Added a regression test to go with the
fix.

Fixes #7641.
  • Loading branch information
othiym23 committed Mar 17, 2015
1 parent 61915a8 commit 1549106
Show file tree
Hide file tree
Showing 5 changed files with 144 additions and 50 deletions.
8 changes: 7 additions & 1 deletion lib/shrinkwrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@ function shrinkwrap (args, silent, cb) {
log.warn("shrinkwrap", "doesn't take positional args")
}

// https://github.com/npm/npm/issues/7641
// introduced because `npm ls` can now show dev and prod depenednecy
// trees separately
if (npm.config.get("dev")) {
npm.config.set("production", true)
}
npm.commands.ls([], true, function (er, _, pkginfo) {
if (er) return cb(er)
shrinkwrap_(pkginfo, silent, npm.config.get("dev"), cb)
Expand All @@ -45,7 +51,7 @@ function shrinkwrap_ (pkginfo, silent, dev, cb) {
return
}

log.warn("shrinkwrap", "Excluding devDependency: %s", dep)
log.warn("shrinkwrap", "Excluding devDependency: %s", dep, data.dependencies)
delete pkginfo.dependencies[dep]
})
}
Expand Down
73 changes: 48 additions & 25 deletions test/tap/shrinkwrap-dev-dependency.js
Original file line number Diff line number Diff line change
@@ -1,53 +1,78 @@
var npm = npm = require("../../")
var test = require("tap").test
var path = require("path")
var fs = require("fs")
var osenv = require("osenv")
var rimraf = require("rimraf")
var mr = require("npm-registry-mock")
var common = require("../common-tap.js")

var pkg = path.resolve(__dirname, "shrinkwrap-dev-dependency")
var desiredResultsPath = path.resolve(pkg, "desired-shrinkwrap-results.json")
var fs = require('fs')
var path = require('path')

var mkdirp = require('mkdirp')
var mr = require('npm-registry-mock')
var osenv = require('osenv')
var rimraf = require('rimraf')
var test = require('tap').test

var npm = npm = require('../../')

var common = require('../common-tap.js')
var pkg = path.resolve(__dirname, 'shrinkwrap-dev-dependency')

test("shrinkwrap doesn't strip out the dependency", function (t) {
t.plan(1)

mr({port : common.port}, function (er, s) {
mr({port: common.port}, function (er, s) {
setup({}, function (err) {
if (err) return t.fail(err)

npm.install(".", function (err) {
npm.install('.', function (err) {
if (err) return t.fail(err)

npm.commands.shrinkwrap([], true, function (err, results) {
if (err) return t.fail(err)

fs.readFile(desiredResultsPath, function (err, desired) {
if (err) return t.fail(err)

t.deepEqual(results, JSON.parse(desired))
s.close()
t.end()
})
t.deepEqual(results, desired)
s.close()
t.end()
})
})
})
})
})

test("cleanup", function (t) {
test('cleanup', function (t) {
cleanup()
t.end()
})

var desired = {
name: 'npm-test-shrinkwrap-dev-dependency',
version: '0.0.0',
dependencies: {
request: {
version: '0.9.0'
},
underscore: {
version: '1.3.1'
}
}
}

var json = {
author: 'Domenic Denicola',
name: 'npm-test-shrinkwrap-dev-dependency',
version: '0.0.0',
dependencies: {
request: '0.9.0',
underscore: '1.3.1'
},
devDependencies: {
underscore: '1.5.1'
}
}

function setup (opts, cb) {
cleanup()
mkdirp.sync(pkg)
fs.writeFileSync(path.join(pkg, 'package.json'), JSON.stringify(json, null, 2))
process.chdir(pkg)

var allOpts = {
cache: path.resolve(pkg, "cache"),
cache: path.resolve(pkg, 'cache'),
registry: common.registry
}

Expand All @@ -60,7 +85,5 @@ function setup (opts, cb) {

function cleanup () {
process.chdir(osenv.tmpdir())
rimraf.sync(path.resolve(pkg, "node_modules"))
rimraf.sync(path.resolve(pkg, "cache"))
rimraf.sync(path.resolve(pkg, "npm-shrinkwrap.json"))
rimraf.sync(pkg)
}
12 changes: 0 additions & 12 deletions test/tap/shrinkwrap-dev-dependency/desired-shrinkwrap-results.json

This file was deleted.

12 changes: 0 additions & 12 deletions test/tap/shrinkwrap-dev-dependency/package.json

This file was deleted.

89 changes: 89 additions & 0 deletions test/tap/shrinkwrap-prod-dependency.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
var fs = require('fs')
var path = require('path')

var mkdirp = require('mkdirp')
var mr = require('npm-registry-mock')
var osenv = require('osenv')
var rimraf = require('rimraf')
var test = require('tap').test

var npm = npm = require('../../')

var common = require('../common-tap.js')
var pkg = path.resolve(__dirname, 'shrinkwrap-prod-dependency')

test("shrinkwrap --dev doesn't strip out prod dependencies", function (t) {
t.plan(1)

mr({port: common.port}, function (er, s) {
setup({}, function (err) {
if (err) return t.fail(err)

npm.install('.', function (err) {
if (err) return t.fail(err)

npm.config.set('dev', true)
npm.commands.shrinkwrap([], true, function (err, results) {
if (err) return t.fail(err)

t.deepEqual(results, desired)
s.close()
t.end()
})
})
})
})
})

test('cleanup', function (t) {
cleanup()
t.end()
})

var desired = {
name: 'npm-test-shrinkwrap-prod-dependency',
version: '0.0.0',
dependencies: {
request: {
version: '0.9.0'
},
underscore: {
version: '1.5.1'
}
}
}

var json = {
author: 'Domenic Denicola',
name: 'npm-test-shrinkwrap-prod-dependency',
version: '0.0.0',
dependencies: {
request: '0.9.0'
},
devDependencies: {
underscore: '1.5.1'
}
}

function setup (opts, cb) {
cleanup()
mkdirp.sync(pkg)
fs.writeFileSync(path.join(pkg, 'package.json'), JSON.stringify(json, null, 2))
process.chdir(pkg)

var allOpts = {
cache: path.resolve(pkg, 'cache'),
registry: common.registry
}

for (var key in opts) {
allOpts[key] = opts[key]
}

npm.load(allOpts, cb)
}

function cleanup () {
process.chdir(osenv.tmpdir())
rimraf.sync(pkg)
}

0 comments on commit 1549106

Please sign in to comment.