From 6916d725a06a57e92ff9d046ccf132c305cd0a51 Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 2 Nov 2021 11:45:28 +0800 Subject: [PATCH] fix(devtools): avoid open handle in non-browser env fix #4815 --- packages/runtime-core/src/devtools.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/runtime-core/src/devtools.ts b/packages/runtime-core/src/devtools.ts index 2e09a2e24a1..878bb68bfea 100644 --- a/packages/runtime-core/src/devtools.ts +++ b/packages/runtime-core/src/devtools.ts @@ -49,7 +49,14 @@ export function setDevtoolsHook(hook: DevtoolsHook, target: any) { devtools.enabled = true buffer.forEach(({ event, args }) => devtools.emit(event, ...args)) 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__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []) 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) setTimeout(() => { if (!devtools) { + target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null devtoolsNotInstalled = true buffer = [] } }, 3000) + } else { + // non-browser env, assume not installed + devtoolsNotInstalled = true + buffer = [] } }