Skip to content

Commit 1f89041

Browse files
addaleaxzkat
authored andcommitted
Exclude dev deps from being auto-added to deps and vice versa (#61)
* exclude dev deps from being auto-added to deps and vice versa Do not add folders from node_modules/ which are present in the existing package.json’s `devDependencies` field to the `dependencies` field of the newly generated package.json, and vice versa. Fixes: npm/npm#12260 * add basic tests for reading in the dependencies PR-URL: #61 Credit: @addaleax Reviewed-By: @zkat
1 parent 3c34250 commit 1f89041

File tree

3 files changed

+65
-4
lines changed

3 files changed

+65
-4
lines changed

default-input.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ function niceName (n) {
1515
return n.replace(/^node-|[.-]js$/g, '').toLowerCase()
1616
}
1717

18-
function readDeps (test) { return function (cb) {
18+
function readDeps (test, excluded) { return function (cb) {
1919
fs.readdir('node_modules', function (er, dir) {
2020
if (er) return cb()
2121
var deps = {}
2222
var n = dir.length
2323
if (n === 0) return cb(null, deps)
2424
dir.forEach(function (d) {
2525
if (d.match(/^\./)) return next()
26-
if (test !== isTestPkg(d))
26+
if (test !== isTestPkg(d) || excluded[d])
2727
return next()
2828

2929
var dp = path.join(dirname, 'node_modules', d, 'package.json')
@@ -137,11 +137,11 @@ exports.directories = function (cb) {
137137
}
138138

139139
if (!package.dependencies) {
140-
exports.dependencies = readDeps(false)
140+
exports.dependencies = readDeps(false, package.devDependencies || {})
141141
}
142142

143143
if (!package.devDependencies) {
144-
exports.devDependencies = readDeps(true)
144+
exports.devDependencies = readDeps(true, package.dependencies || {})
145145
}
146146

147147
// MUST have a test script!

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"validate-npm-package-name": "^2.0.1"
2424
},
2525
"devDependencies": {
26+
"mkdirp": "^0.5.1",
2627
"npm": "^2",
2728
"rimraf": "^2.1.4",
2829
"tap": "^1.2.0"

test/dependencies.js

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
var tap = require('tap')
2+
var init = require('../')
3+
var path = require('path')
4+
var rimraf = require('rimraf')
5+
var mkdirp = require('mkdirp')
6+
var fs = require('fs')
7+
8+
var EXPECT = {
9+
name: 'test-deps',
10+
version: '1.0.0',
11+
description: '',
12+
author: '',
13+
scripts: { test: 'mocha' },
14+
main: 'index.js',
15+
keywords: [],
16+
license: 'ISC',
17+
dependencies: {
18+
'tap': '*'
19+
},
20+
devDependencies: {
21+
'mocha': '^1.0.0'
22+
}
23+
}
24+
25+
var origwd = process.cwd()
26+
var testdir = path.resolve(__dirname, 'test-deps')
27+
mkdirp.sync(testdir)
28+
process.chdir(testdir)
29+
30+
fs.writeFileSync(path.resolve(testdir, 'package.json'), JSON.stringify({
31+
dependencies: {
32+
'tap': '*'
33+
}
34+
}))
35+
36+
var fakedeps = ['mocha', 'tap', 'async', 'foobar']
37+
38+
fakedeps.forEach(function(dep) {
39+
var depdir = path.resolve(testdir, 'node_modules', dep)
40+
mkdirp.sync(depdir)
41+
42+
fs.writeFileSync(path.resolve(depdir, 'package.json'), JSON.stringify({
43+
name: dep,
44+
version: '1.0.0'
45+
}))
46+
})
47+
48+
tap.test('read in dependencies and dev deps', function (t) {
49+
init(testdir, testdir, {yes: 'yes', 'save-prefix': '^'}, function (er, data) {
50+
if (er) throw er
51+
52+
t.same(data, EXPECT, 'used the correct dependency information')
53+
t.end()
54+
})
55+
})
56+
57+
tap.test('teardown', function (t) {
58+
process.chdir(origwd)
59+
rimraf(testdir, t.end.bind(t))
60+
})

0 commit comments

Comments
 (0)