Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: nest importedCss and importedAssets under viteMetadata #4

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 4 additions & 2 deletions packages/vite/src/node/index.ts
Expand Up @@ -58,6 +58,7 @@ export type {
HtmlTagDescriptor
} from './plugins/html'
export type { CSSOptions, CSSModulesOptions } from './plugins/css'
export type { ChunkMetadata } from './plugins/metadata'
export type { JsonOptions } from './plugins/json'
export type { TransformOptions as EsbuildTransformOptions } from 'esbuild'
export type { ESBuildOptions, ESBuildTransformResult } from './plugins/esbuild'
Expand Down Expand Up @@ -92,9 +93,10 @@ export type { RollupCommonJSOptions } from 'types/commonjs'
export type { RollupDynamicImportVarsOptions } from 'types/dynamicImportVars'
export type { Matcher, AnymatchPattern, AnymatchFn } from 'types/anymatch'

import type { ChunkMetadata } from './plugins/metadata'

declare module 'rollup' {
export interface RenderedChunk {
importedAssets: Set<string>
importedCss: Set<string>
viteMetadata: ChunkMetadata
}
}
4 changes: 1 addition & 3 deletions packages/vite/src/node/plugins/asset.ts
Expand Up @@ -77,8 +77,6 @@ export function assetPlugin(config: ResolvedConfig): Plugin {
},

renderChunk(code, chunk) {
chunk.importedAssets = new Set()

let match: RegExpExecArray | null
let s: MagicString | undefined

Expand All @@ -96,7 +94,7 @@ export function assetPlugin(config: ResolvedConfig): Plugin {
// some internal plugins may still need to emit chunks (e.g. worker) so
// fallback to this.getFileName for that.
const file = getAssetFilename(hash, config) || this.getFileName(hash)
chunk.importedAssets.add(cleanUrl(file))
chunk.viteMetadata.importedAssets.add(cleanUrl(file))
const outputFilepath = config.base + file + postfix
s.overwrite(match.index, match.index + full.length, outputFilepath)
}
Expand Down
14 changes: 8 additions & 6 deletions packages/vite/src/node/plugins/css.ts
Expand Up @@ -364,8 +364,6 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
}
}

chunk.importedCss = new Set()

if (!chunkCSS) {
return null
}
Expand All @@ -386,7 +384,7 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
const isRelativeBase = config.base === '' || config.base.startsWith('.')
css = css.replace(assetUrlRE, (_, fileHash, postfix = '') => {
const filename = getAssetFilename(fileHash, config) + postfix
chunk.importedAssets.add(cleanUrl(filename))
chunk.viteMetadata.importedAssets.add(cleanUrl(filename))
if (!isRelativeBase || inlined) {
// absolute base or relative base but inlined (injected as style tag into
// index.html) use the base as-is
Expand Down Expand Up @@ -423,7 +421,7 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
type: 'asset',
source: chunkCSS
})
chunk.importedCss.add(this.getFileName(fileHandle))
chunk.viteMetadata.importedCss.add(this.getFileName(fileHandle))
} else if (!config.build.ssr) {
// legacy build, inline css
chunkCSS = await processChunkCSS(chunkCSS, {
Expand Down Expand Up @@ -481,8 +479,12 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
// chunks instead.
chunk.imports = chunk.imports.filter((file) => {
if (pureCssChunks.has(file)) {
const { importedCss } = bundle[file] as OutputChunk
importedCss.forEach((file) => chunk.importedCss.add(file))
const {
viteMetadata: { importedCss }
} = bundle[file] as OutputChunk
importedCss.forEach((file) =>
chunk.viteMetadata.importedCss.add(file)
)
return false
}
return true
Expand Down
2 changes: 1 addition & 1 deletion packages/vite/src/node/plugins/html.ts
Expand Up @@ -532,7 +532,7 @@ export function buildHtmlPlugin(config: ResolvedConfig): Plugin {
})
}

chunk.importedCss.forEach((file) => {
chunk.viteMetadata.importedCss.forEach((file) => {
if (!seen.has(file)) {
seen.add(file)
tags.push({
Expand Down
6 changes: 3 additions & 3 deletions packages/vite/src/node/plugins/importAnalysisBuild.ts
Expand Up @@ -277,7 +277,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin {
const chunk = bundle[filename] as OutputChunk | undefined
if (chunk) {
deps.add(chunk.fileName)
chunk.importedCss.forEach((file) => {
chunk.viteMetadata.importedCss.forEach((file) => {
deps.add(file)
})
chunk.imports.forEach(addDeps)
Expand All @@ -286,8 +286,8 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin {
removedPureCssFilesCache.get(config)!
const chunk = removedPureCssFiles.get(filename)
if (chunk) {
if (chunk.importedCss.size) {
chunk.importedCss.forEach((file) => {
if (chunk.viteMetadata.importedCss.size) {
chunk.viteMetadata.importedCss.forEach((file) => {
deps.add(file)
})
hasRemovedPureCssChunk = true
Expand Down
2 changes: 2 additions & 0 deletions packages/vite/src/node/plugins/index.ts
Expand Up @@ -16,6 +16,7 @@ import { preAliasPlugin } from './preAlias'
import { definePlugin } from './define'
import { ssrRequireHookPlugin } from './ssrRequireHook'
import { workerImportMetaUrlPlugin } from './workerImportMetaUrl'
import { metadataPlugin } from './metadata'

export async function resolvePlugins(
config: ResolvedConfig,
Expand All @@ -30,6 +31,7 @@ export async function resolvePlugins(
: { pre: [], post: [] }

return [
isBuild ? metadataPlugin() : null,
isBuild ? null : preAliasPlugin(),
aliasPlugin({ entries: config.resolve.alias }),
...prePlugins,
Expand Down
8 changes: 4 additions & 4 deletions packages/vite/src/node/plugins/manifest.ts
Expand Up @@ -88,11 +88,11 @@ export function manifestPlugin(config: ResolvedConfig): Plugin {
}
}

if (chunk.importedCss.size) {
manifestChunk.css = [...chunk.importedCss]
if (chunk.viteMetadata.importedCss.size) {
manifestChunk.css = [...chunk.viteMetadata.importedCss]
}
if (chunk.importedAssets.size) {
manifestChunk.assets = [...chunk.importedAssets]
if (chunk.viteMetadata.importedAssets.size) {
manifestChunk.assets = [...chunk.viteMetadata.importedAssets]
}

return manifestChunk
Expand Down
23 changes: 23 additions & 0 deletions packages/vite/src/node/plugins/metadata.ts
@@ -0,0 +1,23 @@
import type { Plugin } from '../plugin'

export interface ChunkMetadata {
importedAssets: Set<string>
importedCss: Set<string>
}

/**
* Prepares the rendered chunks to contain additional metadata during build.
*/
export function metadataPlugin(): Plugin {
return {
name: 'vite:build-metadata',

async renderChunk(_code, chunk) {
chunk.viteMetadata = {
importedAssets: new Set(),
importedCss: new Set()
}
return null
}
}
}
6 changes: 3 additions & 3 deletions packages/vite/src/node/ssr/ssrManifestPlugin.ts
Expand Up @@ -26,11 +26,11 @@ export function ssrManifestPlugin(config: ResolvedConfig): Plugin {
mappedChunks.push(base + chunk.fileName)
// <link> tags for entry chunks are already generated in static HTML,
// so we only need to record info for non-entry chunks.
chunk.importedCss.forEach((file) => {
chunk.viteMetadata.importedCss.forEach((file) => {
mappedChunks.push(base + file)
})
}
chunk.importedAssets.forEach((file) => {
chunk.viteMetadata.importedAssets.forEach((file) => {
mappedChunks.push(base + file)
})
}
Expand Down Expand Up @@ -64,7 +64,7 @@ export function ssrManifestPlugin(config: ResolvedConfig): Plugin {
analyzed.add(filename)
const chunk = bundle[filename] as OutputChunk | undefined
if (chunk) {
chunk.importedCss.forEach((file) => {
chunk.viteMetadata.importedCss.forEach((file) => {
deps.push(`/${file}`)
})
chunk.imports.forEach(addDeps)
Expand Down