buildTimeImportMetaUrlPlugin() — vite Function Reference
Architecture documentation for the buildTimeImportMetaUrlPlugin() function in rolldown.config.ts from the vite codebase.
Entity Profile
Dependency Diagram
graph TD 155ba343_789d_d2df_e14f_933b0ec9e2f5["buildTimeImportMetaUrlPlugin()"] 095867e3_0044_bba5_61f7_c60c3c9e56ce["rolldown.config.ts"] 155ba343_789d_d2df_e14f_933b0ec9e2f5 -->|defined in| 095867e3_0044_bba5_61f7_c60c3c9e56ce style 155ba343_789d_d2df_e14f_933b0ec9e2f5 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
packages/vite/rolldown.config.ts lines 293–370
function buildTimeImportMetaUrlPlugin(): Plugin {
const idMap: Record<string, number> = {}
let lastIndex = 0
const prefix = `__vite_buildTimeImportMetaUrl_`
const keepCommentRE = /\/\*\*\s*[#@]__KEEP__\s*\*\/\s*$/
return {
name: 'import-meta-current-dirname',
transform: {
filter: {
code: 'import.meta.url',
},
async handler(code, id) {
const relativeId = path.relative(dirname, id).replaceAll('\\', '/')
// only replace import.meta.url in src/
if (!relativeId.startsWith('src/')) return
let index: number
if (idMap[id]) {
index = idMap[id]
} else {
index = idMap[id] = lastIndex
lastIndex++
}
await init
const s = new MagicString(code)
const [imports] = parse(code)
for (const { t, ss, se } of imports) {
if (t === 3 && code.slice(se, se + 4) === '.url') {
// ignore import.meta.url with /** #__KEEP__ */ comment
if (keepCommentRE.test(code.slice(0, ss))) {
keepCommentRE.lastIndex = 0
continue
}
// import.meta.url
s.overwrite(ss, se + 4, `${prefix}${index}`)
}
}
return s.hasChanged() ? s.toString() : undefined
},
},
renderChunk(code, chunk, outputOptions) {
if (!code.includes(prefix)) return
return code.replace(
/__vite_buildTimeImportMetaUrl_(\d+)/g,
(_, index) => {
const originalFile = Object.keys(idMap).find(
(key) => idMap[key] === +index,
)
if (!originalFile) {
throw new Error(
`Could not find original file for ${prefix}${index} in ${chunk.fileName}`,
)
}
const outputFile = path.resolve(outputOptions.dir!, chunk.fileName)
const relativePath = path
.relative(path.dirname(outputFile), originalFile)
.replaceAll('\\', '/')
if (outputOptions.format === 'es') {
return `new URL(${JSON.stringify(relativePath)}, import.meta.url)`
} else if (outputOptions.format === 'cjs') {
return `new URL(${JSON.stringify(
relativePath,
)}, require('node:url').pathToFileURL(__filename))`
} else {
throw new Error(`Unsupported output format ${outputOptions.format}`)
}
},
)
},
}
}
Domain
Subdomains
Defined In
Source
Frequently Asked Questions
What does buildTimeImportMetaUrlPlugin() do?
buildTimeImportMetaUrlPlugin() is a function in the vite codebase, defined in packages/vite/rolldown.config.ts.
Where is buildTimeImportMetaUrlPlugin() defined?
buildTimeImportMetaUrlPlugin() is defined in packages/vite/rolldown.config.ts at line 293.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free