UNPKG

vike

Version:

The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.

47 lines (46 loc) 2.72 kB
export { pluginBaseUrls }; import { resolveBase } from '../../shared/resolveBase.js'; import { assert } from '../utils.js'; import { getVikeConfigInternal } from '../shared/resolveVikeConfigInternal.js'; function pluginBaseUrls() { let basesResolved; return { name: 'vike:pluginBaseUrls', enforce: 'post', async config(config) { const isDev = config._isDev; assert(typeof isDev === 'boolean'); const baseViteOriginal = config.base ?? '/__UNSET__'; // '/__UNSET__' because Vite resolves `_baseViteOriginal: null` to `undefined` const vikeConfig = await getVikeConfigInternal(); basesResolved = resolveBase(baseViteOriginal, vikeConfig.config.baseServer ?? null, vikeConfig.config.baseAssets ?? null); // We cannot define these in configResolved() because Vite picks up the env variables before any configResolved() hook is called process.env.BASE_SERVER = basesResolved.baseServer; process.env.BASE_ASSETS = basesResolved.baseAssets; return { envPrefix: [ 'VITE_', // Vite doesn't seem to merge in its default, see https://github.com/vikejs/vike/issues/554 'BASE_SERVER', 'BASE_ASSETS', ], base: basesResolved.baseAssets, // Make Vite inject baseAssets to imports e.g. `import logoUrl from './logo.svg.js'` _baseViteOriginal: baseViteOriginal, }; }, async configResolved(config) { const vikeConfig = await getVikeConfigInternal(); const basesResolved2 = resolveBaseFromResolvedConfig(vikeConfig.config.baseServer ?? null, vikeConfig.config.baseAssets ?? null, config); assert(basesResolved2.baseServer === basesResolved.baseServer); assert(basesResolved2.baseAssets === basesResolved.baseAssets); /* In dev, Vite seems buggy around setting vite.config.js#base to an absolute URL (e.g. http://localhost:8080/cdn/) * - In dev, Vite removes the URL origin. (I.e. it resolves the user config `vite.config.js#base: 'http://localhost:8080/cdn/'` to resolved config `config.base === '/cdn/'`.) * - Instead of having an internal Vike assertion fail, we let the user discover Vite's buggy behavior. assert(config.base === baseAssets) */ }, }; } function resolveBaseFromResolvedConfig(baseServer, baseAssets, config) { let baseViteOriginal = config._baseViteOriginal; assert(baseViteOriginal === null || typeof baseViteOriginal == 'string'); return resolveBase(baseViteOriginal, baseServer, baseAssets); }