From a402c6b1926b94c6a230cd6e371d8c6f09e5f6cd Mon Sep 17 00:00:00 2001 From: bluwy Date: Thu, 7 Jul 2022 19:34:50 +0800 Subject: [PATCH] fix(scan): detect import .ts as .js --- packages/vite/src/node/optimizer/scan.ts | 27 ++++++++++++++++++----- packages/vite/src/node/plugins/resolve.ts | 5 ++++- playground/vue/TsImport.vue | 2 +- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/packages/vite/src/node/optimizer/scan.ts b/packages/vite/src/node/optimizer/scan.ts index f4eae2bc2ed3e2..f1f698a15258a9 100644 --- a/packages/vite/src/node/optimizer/scan.ts +++ b/packages/vite/src/node/optimizer/scan.ts @@ -25,6 +25,8 @@ import type { PluginContainer } from '../server/pluginContainer' import { createPluginContainer } from '../server/pluginContainer' import { transformGlobImport } from '../plugins/importMetaGlob' +type ResolveIdOptions = Parameters[2] + const debug = createDebugger('vite:deps') const htmlTypesRE = /\.(html|vue|svelte|astro)$/ @@ -163,7 +165,11 @@ function esbuildScanPlugin( ): Plugin { const seen = new Map() - const resolve = async (id: string, importer?: string) => { + const resolve = async ( + id: string, + importer?: string, + options?: ResolveIdOptions + ) => { const key = id + (importer && path.dirname(importer)) if (seen.has(key)) { return seen.get(key) @@ -172,6 +178,7 @@ function esbuildScanPlugin( id, importer && normalizePath(importer), { + ...options, scan: true } ) @@ -316,12 +323,18 @@ function esbuildScanPlugin( config.root, resolve ) - )?.s.toString() || transpiledContents + )?.s.toString() || transpiledContents, + pluginData: { + htmlType: { loader } + } } } else { scripts[key] = { loader, - contents + contents, + pluginData: { + htmlType: { loader } + } } } @@ -434,9 +447,13 @@ function esbuildScanPlugin( { filter: /.*/ }, - async ({ path: id, importer }) => { + async ({ path: id, importer, pluginData }) => { // use vite resolver to support urls and omitted extensions - const resolved = await resolve(id, importer) + const resolved = await resolve(id, importer, { + custom: { + depScan: { loader: pluginData?.htmlType?.loader } + } + }) if (resolved) { if (shouldExternalizeDep(resolved, id) || !isScannable(resolved)) { return externalUnlessEntry({ path: id }) diff --git a/packages/vite/src/node/plugins/resolve.ts b/packages/vite/src/node/plugins/resolve.ts index 051f11024a6768..1ebe847359384c 100644 --- a/packages/vite/src/node/plugins/resolve.ts +++ b/packages/vite/src/node/plugins/resolve.ts @@ -132,7 +132,10 @@ export function resolvePlugin(resolveOptions: InternalResolveOptions): Plugin { } if (importer) { - if (isTsRequest(importer)) { + if ( + isTsRequest(importer) || + resolveOpts.custom?.depScan?.loader?.startsWith('ts') + ) { options.isFromTsImporter = true } else { const moduleLang = this.getModuleInfo(importer)?.meta?.vite?.lang diff --git a/playground/vue/TsImport.vue b/playground/vue/TsImport.vue index 986c383b2b9f4b..2b65011a160d23 100644 --- a/playground/vue/TsImport.vue +++ b/playground/vue/TsImport.vue @@ -4,5 +4,5 @@