summaryrefslogtreecommitdiff
path: root/deps/npm/lib/shrinkwrap.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/lib/shrinkwrap.js')
-rw-r--r--deps/npm/lib/shrinkwrap.js17
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
+}