Skip to content

Commit e3721c2

Browse files
authored
fix: require stdout to be a TTY for progress (#7507)
1 parent 8add914 commit e3721c2

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

workspaces/config/lib/definitions/definitions.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -1549,13 +1549,16 @@ const definitions = {
15491549
type: Boolean,
15501550
description: `
15511551
When set to \`true\`, npm will display a progress bar during time
1552-
intensive operations, if \`process.stderr\` is a TTY.
1552+
intensive operations, if \`process.stderr\` and \`process.stdout\` are a TTY.
15531553
15541554
Set to \`false\` to suppress the progress bar.
15551555
`,
15561556
flatten (key, obj, flatOptions) {
15571557
flatOptions.progress = !obj.progress ? false
1558-
: !!process.stderr.isTTY && process.env.TERM !== 'dumb'
1558+
// progress is only written to stderr but we disable it unless stdout is a tty
1559+
// also. This prevents the progress from appearing when piping output to another
1560+
// command which doesn't break anything, but does look very odd to users.
1561+
: !!process.stderr.isTTY && !!process.stdout.isTTY && process.env.TERM !== 'dumb'
15591562
},
15601563
}),
15611564
provenance: new Definition('provenance', {

workspaces/config/test/definitions/definitions.js

+1
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,7 @@ t.test('color', t => {
396396
t.test('progress', t => {
397397
const setEnv = ({ tty, term } = {}) => mockGlobals(t, {
398398
'process.stderr.isTTY': tty,
399+
'process.stdout.isTTY': tty,
399400
'process.env.TERM': term,
400401
})
401402

0 commit comments

Comments
 (0)