From 41440dadcb2e3060b900a676c6736c1e498a812c Mon Sep 17 00:00:00 2001 From: Kkk <2568143457@qq.com> Date: Sat, 6 Dec 2025 17:25:58 +0800 Subject: [PATCH] feat: support dynamic generate function for importmap's link --- src/import-map.ts | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/import-map.ts b/src/import-map.ts index 328cb40b..d3c986a4 100644 --- a/src/import-map.ts +++ b/src/import-map.ts @@ -1,5 +1,7 @@ import { computed, version as currentVersion, ref } from 'vue' +type DynamicGenPath = (version: string, productionMode: boolean) => string + export function getVersions(version: string): number[] { return version.split('.').map((v) => parseInt(v, 10)) } @@ -12,15 +14,18 @@ export function isVaporSupported(version: string): boolean{ export function useVueImportMap( defaults: { - runtimeDev?: string | (() => string) - runtimeProd?: string | (() => string) - serverRenderer?: string | (() => string) + runtimeDev?: string | DynamicGenPath + runtimeProd?: string | DynamicGenPath + serverRenderer?: string | DynamicGenPath vueVersion?: string | null } = {}, ) { - function normalizeDefaults(defaults?: string | (() => string)) { + function normalizePath(defaults?: string | DynamicGenPath) { if (!defaults) return - return typeof defaults === 'string' ? defaults : defaults() + + const version = vueVersion.value + const defaultIsStr = typeof defaults === 'string' + return !defaultIsStr ? defaults(version || currentVersion, productionMode.value) : (!version && defaults || undefined) } const productionMode = ref(false) @@ -35,14 +40,13 @@ export function useVueImportMap( const importMap = computed(() => { const vue = - (!vueVersion.value && - normalizeDefaults( - productionMode.value ? defaults.runtimeProd : defaults.runtimeDev, - )) || + normalizePath( + productionMode.value ? defaults.runtimeProd : defaults.runtimeDev, + ) || getVueURL() const serverRenderer = - (!vueVersion.value && normalizeDefaults(defaults.serverRenderer)) || + normalizePath(defaults.serverRenderer) || `https://cdn.jsdelivr.net/npm/@vue/server-renderer@${ vueVersion.value || currentVersion }/dist/server-renderer.esm-browser.js`