diff options
Diffstat (limited to 'deps/npm/lib/shrinkwrap.js')
-rw-r--r-- | deps/npm/lib/shrinkwrap.js | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/deps/npm/lib/shrinkwrap.js b/deps/npm/lib/shrinkwrap.js index 14711df26..4aed5964e 100644 --- a/deps/npm/lib/shrinkwrap.js +++ b/deps/npm/lib/shrinkwrap.js @@ -38,6 +38,11 @@ function shrinkwrap_ (pkginfo, silent, dev, cb) { return cb(er) if (data.devDependencies) { Object.keys(data.devDependencies).forEach(function (dep) { + if (data.dependencies && data.dependencies[dep]) { + // do not exclude the dev dependency if it's also listed as a dependency + return + } + log.warn("shrinkwrap", "Excluding devDependency: %s", dep) delete pkginfo.dependencies[dep] }) @@ -51,6 +56,9 @@ function shrinkwrap_ (pkginfo, silent, dev, cb) { function save (pkginfo, silent, cb) { + // copy the keys over in a well defined order + // because javascript objects serialize arbitrarily + pkginfo.dependencies = copyOrder(pkginfo.dependencies) try { var swdata = JSON.stringify(pkginfo, null, 2) + "\n" } catch (er) { @@ -67,3 +75,12 @@ function save (pkginfo, silent, cb) { cb(null, pkginfo) }) } + +function copyOrder(obj) { + var result = {} + var keys = Object.keys(obj).sort() + keys.forEach(function (key) { + result[key] = obj[key] + }) + return result +} |