mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-05 15:40:10 +00:00
perf: code-split xterm bundle and gate terminal features for cloud
- Gate logs-terminal keybinding (Ctrl+`) registration for cloud builds - Filter out ToggleBottomPanel command for cloud builds - Gate terminal tab registration in bottomPanelStore for cloud - Convert terminal tab components to async imports (defineAsyncComponent) - Dynamic import of useTerminalTabs module ensures xterm bundle is tree-shaken The ~400KB xterm bundle (vendor-xterm-*.js) is now only loaded on non-cloud distributions when terminal tabs are registered. Fixes COM-14129 Co-authored-by: Amp <amp@ampcode.com> Amp-Thread-ID: https://ampcode.com/threads/T-019c17af-8992-739f-be03-1e375de1b56b
This commit is contained in:
@@ -1,27 +1,27 @@
|
||||
import { markRaw } from 'vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
|
||||
import CommandTerminal from '@/components/bottomPanel/tabs/terminal/CommandTerminal.vue'
|
||||
import LogsTerminal from '@/components/bottomPanel/tabs/terminal/LogsTerminal.vue'
|
||||
import CommandTerminal from '@/components/bottomPanel/tabs/terminal/CommandTerminal.vue'
|
||||
import type { BottomPanelExtension } from '@/types/extensionTypes'
|
||||
|
||||
export const useLogsTerminalTab = (): BottomPanelExtension => {
|
||||
export function useLogsTerminalTab(): BottomPanelExtension {
|
||||
const { t } = useI18n()
|
||||
return {
|
||||
id: 'logs-terminal',
|
||||
title: t('g.logs'), // For command labels (collected by i18n workflow)
|
||||
titleKey: 'g.logs', // For dynamic translation in UI
|
||||
title: t('g.logs'),
|
||||
titleKey: 'g.logs',
|
||||
component: markRaw(LogsTerminal),
|
||||
type: 'vue'
|
||||
}
|
||||
}
|
||||
|
||||
export const useCommandTerminalTab = (): BottomPanelExtension => {
|
||||
export function useCommandTerminalTab(): BottomPanelExtension {
|
||||
const { t } = useI18n()
|
||||
return {
|
||||
id: 'command-terminal',
|
||||
title: t('g.terminal'), // For command labels (collected by i18n workflow)
|
||||
titleKey: 'g.terminal', // For dynamic translation in UI
|
||||
title: t('g.terminal'),
|
||||
titleKey: 'g.terminal',
|
||||
component: markRaw(CommandTerminal),
|
||||
type: 'vue'
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
DEFAULT_DARK_COLOR_PALETTE,
|
||||
DEFAULT_LIGHT_COLOR_PALETTE
|
||||
} from '@/constants/coreColorPalettes'
|
||||
|
||||
import { tryToggleWidgetPromotion } from '@/core/graph/subgraph/proxyWidgetUtils'
|
||||
import { t } from '@/i18n'
|
||||
import {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { isCloud } from '@/platform/distribution/types'
|
||||
import { useSettingStore } from '@/platform/settings/settingStore'
|
||||
import { app } from '@/scripts/app'
|
||||
import { useCommandStore } from '@/stores/commandStore'
|
||||
@@ -108,6 +109,12 @@ export function useKeybindingService() {
|
||||
|
||||
function registerCoreKeybindings() {
|
||||
for (const keybinding of CORE_KEYBINDINGS) {
|
||||
if (
|
||||
isCloud &&
|
||||
keybinding.commandId === 'Workspace.ToggleBottomPanelTab.logs-terminal'
|
||||
) {
|
||||
continue
|
||||
}
|
||||
keybindingStore.addDefaultKeybinding(new KeybindingImpl(keybinding))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,10 +2,7 @@ import { defineStore } from 'pinia'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
import { useShortcutsTab } from '@/composables/bottomPanelTabs/useShortcutsTab'
|
||||
import {
|
||||
useCommandTerminalTab,
|
||||
useLogsTerminalTab
|
||||
} from '@/composables/bottomPanelTabs/useTerminalTabs'
|
||||
|
||||
import { useCommandStore } from '@/stores/commandStore'
|
||||
import type { ComfyExtension } from '@/types/comfy'
|
||||
import type { BottomPanelExtension } from '@/types/extensionTypes'
|
||||
@@ -121,10 +118,15 @@ export const useBottomPanelStore = defineStore('bottomPanel', () => {
|
||||
})
|
||||
}
|
||||
|
||||
const registerCoreBottomPanelTabs = () => {
|
||||
registerBottomPanelTab(useLogsTerminalTab())
|
||||
if (isElectron()) {
|
||||
registerBottomPanelTab(useCommandTerminalTab())
|
||||
const registerCoreBottomPanelTabs = async () => {
|
||||
// Use __DISTRIBUTION__ directly for proper dead code elimination
|
||||
if (__DISTRIBUTION__ !== 'cloud') {
|
||||
const { useLogsTerminalTab, useCommandTerminalTab } =
|
||||
await import('@/composables/bottomPanelTabs/useTerminalTabs')
|
||||
registerBottomPanelTab(useLogsTerminalTab())
|
||||
if (isElectron()) {
|
||||
registerBottomPanelTab(useCommandTerminalTab())
|
||||
}
|
||||
}
|
||||
useShortcutsTab().forEach(registerBottomPanelTab)
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ useCommandStore().registerCommands(coreCommands)
|
||||
useMenuItemStore().registerCoreMenuCommands()
|
||||
useKeybindingService().registerCoreKeybindings()
|
||||
useSidebarTabStore().registerCoreSidebarTabs()
|
||||
useBottomPanelStore().registerCoreBottomPanelTabs()
|
||||
void useBottomPanelStore().registerCoreBottomPanelTabs()
|
||||
|
||||
const queuePendingTaskCountStore = useQueuePendingTaskCountStore()
|
||||
const sidebarTabStore = useSidebarTabStore()
|
||||
|
||||
Reference in New Issue
Block a user