Skip to content

Commit cddad4f

Browse files
authored
fix!: stop auto populating dependencies (#349)
BREAKING CHANGE: existing packages in `node_modules` are no longer used to try to pre-populate dependencies and devDependencies fixes npm/statusboard#1075
1 parent cc57229 commit cddad4f

2 files changed

Lines changed: 18 additions & 63 deletions

File tree

lib/default-input.js

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -7,47 +7,8 @@ const validateName = require('validate-npm-package-name')
77
const npa = require('npm-package-arg')
88
const semver = require('semver')
99

10-
// more popular packages should go here, maybe?
11-
const testPkgs = [
12-
'coco',
13-
'coffee-script',
14-
'expresso',
15-
'jasmine',
16-
'jest',
17-
'mocha',
18-
'streamline',
19-
'tap',
20-
]
21-
const isTestPkg = p => testPkgs.includes(p)
22-
2310
const invalid = (msg) => Object.assign(new Error(msg), { notValid: true })
2411

25-
const readDeps = (test, excluded) => async () => {
26-
const dirs = await fs.readdir('node_modules').catch(() => null)
27-
28-
if (!dirs) {
29-
return
30-
}
31-
32-
const deps = {}
33-
for (const dir of dirs) {
34-
if (dir.match(/^\./) || test !== isTestPkg(dir) || excluded[dir]) {
35-
continue
36-
}
37-
38-
const dp = path.join(dirname, 'node_modules', dir, 'package.json')
39-
const p = await fs.readFile(dp, 'utf8').then((d) => JSON.parse(d)).catch(() => null)
40-
41-
if (!p || !p.version || p?._requiredBy?.some((r) => r === '#USER')) {
42-
continue
43-
}
44-
45-
deps[dir] = config.get('save-exact') ? p.version : config.get('save-prefix') + p.version
46-
}
47-
48-
return deps
49-
}
50-
5112
const getConfig = (key) => {
5213
// dots take precedence over dashes
5314
const def = config?.defaults?.[`init.${key}`]
@@ -167,14 +128,6 @@ exports.directories = async () => {
167128
return Object.keys(res).length === 0 ? undefined : res
168129
}
169130

170-
if (!package.dependencies) {
171-
exports.dependencies = readDeps(false, package.devDependencies || {})
172-
}
173-
174-
if (!package.devDependencies) {
175-
exports.devDependencies = readDeps(true, package.dependencies || {})
176-
}
177-
178131
// MUST have a test script!
179132
if (!package.scripts) {
180133
const scripts = package.scripts || {}

test/dependencies.js

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ if (isChild()) {
55
return child({ chdir: true })
66
}
77

8-
t.test('read in dependencies and dev deps', async (t) => {
8+
t.test('existing dependencies', async (t) => {
99
const testdirContents = {
1010
'package.json': JSON.stringify({
1111
dependencies: {
@@ -16,16 +16,6 @@ t.test('read in dependencies and dev deps', async (t) => {
1616
abbrev: '*',
1717
},
1818
}),
19-
node_modules: {},
20-
}
21-
22-
for (const fakedep of ['mocha', 'tap', 'async', 'foobar']) {
23-
testdirContents.node_modules[fakedep] = {
24-
'package.json': JSON.stringify({
25-
name: fakedep,
26-
version: '1.0.0',
27-
}),
28-
}
2919
}
3020

3121
const { data } = await setup(t, __filename, {
@@ -34,22 +24,34 @@ t.test('read in dependencies and dev deps', async (t) => {
3424
})
3525

3626
t.same(data, {
37-
name: 'tap-testdir-dependencies-read-in-dependencies-and-dev-deps',
27+
name: 'tap-testdir-dependencies-existing-dependencies',
3828
version: '1.0.0',
3929
type: 'commonjs',
4030
description: '',
4131
author: '',
42-
scripts: { test: 'mocha' },
32+
scripts: { test: 'echo "Error: no test specified" && exit 1' },
4333
main: 'index.js',
4434
keywords: [],
4535
dependencies: {
4636
tap: '*',
4737
},
48-
devDependencies: {
49-
mocha: '^1.0.0',
50-
},
5138
optionalDependencies: {
5239
abbrev: '*',
5340
},
5441
}, 'used the correct dependency information')
5542
})
43+
44+
t.test('delete empty dependencies', async (t) => {
45+
const testdirContents = {
46+
'package.json': JSON.stringify({
47+
dependencies: {},
48+
}),
49+
}
50+
51+
const { data } = await setup(t, __filename, {
52+
testdir: testdirContents,
53+
config: { yes: 'yes', 'save-prefix': '^' },
54+
})
55+
56+
t.same(data.dependencies, undefined, 'empty dependencies is removed')
57+
})

0 commit comments

Comments
 (0)