UNPKG

vike

Version:

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

49 lines (48 loc) 3.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pluginBaseUrls = pluginBaseUrls; const resolveBase_js_1 = require("../../shared/resolveBase.js"); const utils_js_1 = require("../utils.js"); const resolveVikeConfigInternal_js_1 = require("../shared/resolveVikeConfigInternal.js"); function pluginBaseUrls() { let basesResolved; return { name: 'vike:pluginBaseUrls', enforce: 'post', async config(config) { const isDev = config._isDev; (0, utils_js_1.assert)(typeof isDev === 'boolean'); const baseViteOriginal = config.base ?? '/__UNSET__'; // '/__UNSET__' because Vite resolves `_baseViteOriginal: null` to `undefined` const vikeConfig = await (0, resolveVikeConfigInternal_js_1.getVikeConfigInternal)(); basesResolved = (0, resolveBase_js_1.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 (0, resolveVikeConfigInternal_js_1.getVikeConfigInternal)(); const basesResolved2 = resolveBaseFromResolvedConfig(vikeConfig.config.baseServer ?? null, vikeConfig.config.baseAssets ?? null, config); (0, utils_js_1.assert)(basesResolved2.baseServer === basesResolved.baseServer); (0, utils_js_1.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; (0, utils_js_1.assert)(baseViteOriginal === null || typeof baseViteOriginal == 'string'); return (0, resolveBase_js_1.resolveBase)(baseViteOriginal, baseServer, baseAssets); }