vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
49 lines (48 loc) • 3.02 kB
JavaScript
;
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);
}