fix(devtools): avoid open handle in non-browser env

fix #4815
This commit is contained in:
Evan You 2021-11-02 11:45:28 +08:00
parent 6b32f0d976
commit 6916d725a0

View File

@ -49,7 +49,14 @@ export function setDevtoolsHook(hook: DevtoolsHook, target: any) {
devtools.enabled = true devtools.enabled = true
buffer.forEach(({ event, args }) => devtools.emit(event, ...args)) buffer.forEach(({ event, args }) => devtools.emit(event, ...args))
buffer = [] buffer = []
} else { } else if (
// handle late devtools injection - only do this if we are in an actual
// browser environment to avoid the timer handle stalling test runner exit
// (#4815)
// eslint-disable-next-line no-restricted-globals
typeof window !== 'undefined' &&
!navigator.userAgent.includes('jsdom')
) {
const replay = (target.__VUE_DEVTOOLS_HOOK_REPLAY__ = const replay = (target.__VUE_DEVTOOLS_HOOK_REPLAY__ =
target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []) target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [])
replay.push((newHook: DevtoolsHook) => { replay.push((newHook: DevtoolsHook) => {
@ -59,10 +66,15 @@ export function setDevtoolsHook(hook: DevtoolsHook, target: any) {
// at all, and keeping the buffer will cause memory leaks (#4738) // at all, and keeping the buffer will cause memory leaks (#4738)
setTimeout(() => { setTimeout(() => {
if (!devtools) { if (!devtools) {
target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null
devtoolsNotInstalled = true devtoolsNotInstalled = true
buffer = [] buffer = []
} }
}, 3000) }, 3000)
} else {
// non-browser env, assume not installed
devtoolsNotInstalled = true
buffer = []
} }
} }