(config: ResolvedConfig)
| 223 | * ``` |
| 224 | */ |
| 225 | export function importAnalysisPlugin(config: ResolvedConfig): Plugin { |
| 226 | const { root, base } = config |
| 227 | const clientPublicPath = path.posix.join(base, CLIENT_PUBLIC_PATH) |
| 228 | const enablePartialAccept = config.experimental.hmrPartialAccept |
| 229 | const matchAlias = getAliasPatternMatcher(config.resolve.alias) |
| 230 | |
| 231 | let _env: string | undefined |
| 232 | let _ssrEnv: string | undefined |
| 233 | function getEnv(ssr: boolean) { |
| 234 | if (!_ssrEnv || !_env) { |
| 235 | const importMetaEnvKeys: Record<string, any> = {} |
| 236 | const userDefineEnv: Record<string, any> = {} |
| 237 | for (const key in config.env) { |
| 238 | importMetaEnvKeys[key] = JSON.stringify(config.env[key]) |
| 239 | } |
| 240 | for (const key in config.define) { |
| 241 | // non-import.meta.env.* is handled in `clientInjection` plugin |
| 242 | if (key.startsWith('import.meta.env.')) { |
| 243 | userDefineEnv[key.slice(16)] = config.define[key] |
| 244 | } |
| 245 | } |
| 246 | const env = `import.meta.env = ${serializeDefine({ |
| 247 | ...importMetaEnvKeys, |
| 248 | SSR: '__vite_ssr__', |
| 249 | ...userDefineEnv, |
| 250 | })};` |
| 251 | _ssrEnv = env.replace('__vite_ssr__', 'true') |
| 252 | _env = env.replace('__vite_ssr__', 'false') |
| 253 | } |
| 254 | return ssr ? _ssrEnv : _env |
| 255 | } |
| 256 | |
| 257 | return { |
| 258 | name: 'vite:import-analysis', |
| 259 | |
| 260 | applyToEnvironment(environment) { |
| 261 | return !environment.config.isBundled |
| 262 | }, |
| 263 | |
| 264 | async transform(source, importer) { |
| 265 | const environment = this.environment as DevEnvironment |
| 266 | const ssr = environment.config.consumer === 'server' |
| 267 | const moduleGraph = environment.moduleGraph |
| 268 | |
| 269 | if (canSkipImportAnalysis(importer)) { |
| 270 | debug?.(colors.dim(`[skipped] ${prettifyUrl(importer, root)}`)) |
| 271 | return null |
| 272 | } |
| 273 | |
| 274 | const msAtStart = debug ? performance.now() : 0 |
| 275 | await init |
| 276 | let imports!: readonly ImportSpecifier[] |
| 277 | let exports!: readonly ExportSpecifier[] |
| 278 | source = stripBomTag(source) |
| 279 | try { |
| 280 | ;[imports, exports] = parseImports(source) |
| 281 | } catch (_e: unknown) { |
| 282 | const e = _e as EsModuleLexerParseError |
no test coverage detected