From e089eff8f8108fa5463e2e42e16244f7edfd5a1e Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 2 Feb 2021 19:58:34 -0500 Subject: [PATCH] fix: make ssr external behavior consistent between dev/build --- packages/vite/src/node/build.ts | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index 7fec04e213c448..fabb2abb507f84 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -571,20 +571,37 @@ export function onRollupWarning( } } -export function resolveExternal( - existing: string[], +function resolveExternal( + ssrExternals: string[], user: ExternalOption | undefined ): ExternalOption { - if (!user) return existing - if (typeof user !== 'function') { - return existing.concat(user as any[]) - } return ((id, parentId, isResolved) => { - if (existing.includes(id)) return true - return user(id, parentId, isResolved) + if ( + ssrExternals.includes(id) || + ssrExternals.some((e) => id.startsWith(e + '/')) + ) { + return true + } + if (user) { + if (typeof user === 'function') { + return user(id, parentId, isResolved) + } else if (Array.isArray(user)) { + return user.some((test) => isExternal(id, test)) + } else { + return isExternal(id, user) + } + } }) as ExternalOption } +function isExternal(id: string, test: string | RegExp) { + if (typeof test === 'string') { + return id === test + } else { + return test.test(id) + } +} + function injectSsrFlagToHooks(p: Plugin): Plugin { const { resolveId, load, transform } = p return {