diff --git a/packages/vite/src/node/__tests__/plugins/importGlob/__snapshots__/fixture.test.ts.snap b/packages/vite/src/node/__tests__/plugins/importGlob/__snapshots__/fixture.test.ts.snap index 3b611c60c9cedc..23e511a50545f7 100644 --- a/packages/vite/src/node/__tests__/plugins/importGlob/__snapshots__/fixture.test.ts.snap +++ b/packages/vite/src/node/__tests__/plugins/importGlob/__snapshots__/fixture.test.ts.snap @@ -38,6 +38,10 @@ export const eagerAs = { \\"./modules/a.ts\\": __vite_glob_5_0, \\"./modules/b.ts\\": __vite_glob_5_1 }; +export const rawImportModule = { +\\"./modules/a.ts\\": () => import(\\"./modules/a.ts?raw\\"), +\\"./modules/b.ts\\": () => import(\\"./modules/b.ts?raw\\") +}; export const excludeSelf = { \\"./sibling.ts\\": () => import(\\"./sibling.ts\\") }; @@ -108,6 +112,10 @@ export const eagerAs = { \\"./modules/a.ts\\": __vite_glob_5_0, \\"./modules/b.ts\\": __vite_glob_5_1 }; +export const rawImportModule = { +\\"./modules/a.ts\\": () => import(\\"./modules/a.ts?raw\\"), +\\"./modules/b.ts\\": () => import(\\"./modules/b.ts?raw\\") +}; export const excludeSelf = { \\"./sibling.ts\\": () => import(\\"./sibling.ts\\") }; diff --git a/packages/vite/src/node/__tests__/plugins/importGlob/fixture-a/index.ts b/packages/vite/src/node/__tests__/plugins/importGlob/fixture-a/index.ts index c5b806da06a4b4..4fed8828e5f418 100644 --- a/packages/vite/src/node/__tests__/plugins/importGlob/fixture-a/index.ts +++ b/packages/vite/src/node/__tests__/plugins/importGlob/fixture-a/index.ts @@ -27,6 +27,11 @@ export const eagerAs = import.meta.glob( { eager: true, as: 'raw' } ) +export const rawImportModule = import.meta.glob( + ['./modules/*.ts', '!**/index.ts'], + { as: 'raw', import: '*' } +) + export const excludeSelf = import.meta.glob( './*.ts' // for test: annotation contain ")" diff --git a/packages/vite/src/node/plugins/importMetaGlob.ts b/packages/vite/src/node/plugins/importMetaGlob.ts index 20bc10f8296ed4..5bf4d14a4dc9f0 100644 --- a/packages/vite/src/node/plugins/importMetaGlob.ts +++ b/packages/vite/src/node/plugins/importMetaGlob.ts @@ -217,11 +217,15 @@ export async function parseImportGlob( } if (options.as && forceDefaultAs.includes(options.as)) { - if (options.import && options.import !== 'default') + if ( + options.import && + options.import !== 'default' && + options.import !== '*' + ) throw err( - `Option "export" can only be "default" when "as" is "${options.as}", but got "${options.import}"` + `Option "import" can only be "default" or "*" when "as" is "${options.as}", but got "${options.import}"` ) - options.import = 'default' + options.import = options.import || 'default' } if (options.as && options.query) @@ -358,10 +362,15 @@ export async function transformGlobImport( importPath = `${importPath}${importQuery}` + const importKey = + options.import && options.import !== '*' + ? options.import + : undefined + if (options.eager) { const variableName = `${importPrefix}${index}_${i}` - const expression = options.import - ? `{ ${options.import} as ${variableName} }` + const expression = importKey + ? `{ ${importKey} as ${variableName} }` : `* as ${variableName}` staticImports.push( `import ${expression} from ${JSON.stringify(importPath)}` @@ -369,10 +378,8 @@ export async function transformGlobImport( objectProps.push(`${JSON.stringify(filePath)}: ${variableName}`) } else { let importStatement = `import(${JSON.stringify(importPath)})` - if (options.import) - importStatement += `.then(m => m[${JSON.stringify( - options.import - )}])` + if (importKey) + importStatement += `.then(m => m[${JSON.stringify(importKey)}])` objectProps.push( `${JSON.stringify(filePath)}: () => ${importStatement}` )