vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
117 lines (116 loc) • 5.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.determineOptimizeDeps = determineOptimizeDeps;
const findPageFiles_js_1 = require("../../shared/findPageFiles.js");
const utils_js_1 = require("../../utils.js");
const resolveVikeConfigInternal_js_1 = require("../../shared/resolveVikeConfigInternal.js");
const pluginBuildConfig_js_1 = require("../pluginBuild/pluginBuildConfig.js");
const virtualFileEntry_js_1 = require("../../../shared/virtualFiles/virtualFileEntry.js");
const getFilePath_js_1 = require("../../shared/getFilePath.js");
const debug = (0, utils_js_1.createDebugger)('vike:optimizeDeps');
async function determineOptimizeDeps(config) {
const vikeConfig = await (0, resolveVikeConfigInternal_js_1.getVikeConfigInternal)();
const { _pageConfigs: pageConfigs } = vikeConfig;
const { entries, include } = await getPageDeps(config, pageConfigs);
{
// This actually doesn't work: Vite's dep optimizer doesn't seem to be able to crawl virtual files.
// - Should we make it work? E.g. by creating a temporary file at node_modules/.vike/virtualFiles.js
// - Or should we remove it? And make sure getPageDeps() also works for aliased import paths
// - If we do, then we need to adjust include/entries (maybe by making include === entries -> will Vite complain?)
const entriesVirtualFiles = getVirtualFiles(config, pageConfigs);
entries.push(...entriesVirtualFiles);
}
/* Other Vite plugins may populate optimizeDeps, e.g. Cypress: https://github.com/vikejs/vike/issues/386
assert(config.optimizeDeps.entries === undefined)
*/
config.optimizeDeps.include = [...include, ...normalizeInclude(config.optimizeDeps.include)];
config.optimizeDeps.entries = [...entries, ...normalizeEntries(config.optimizeDeps.entries)];
if (debug.isActivated)
debug('config.optimizeDeps', {
'config.optimizeDeps.entries': config.optimizeDeps.entries,
'config.optimizeDeps.include': config.optimizeDeps.include,
});
}
async function getPageDeps(config, pageConfigs) {
let entries = [];
let include = [];
const addEntry = (e) => {
(0, utils_js_1.assert)(e);
entries.push(e);
};
const addInclude = (e) => {
(0, utils_js_1.assert)(e);
// Shouldn't be a path alias, as path aliases would need to be added to config.optimizeDeps.entries instead of config.optimizeDeps.include
(0, utils_js_1.assertIsImportPathNpmPackage)(e);
include.push(e);
};
// V1 design
{
pageConfigs.forEach((pageConfig) => {
Object.entries(pageConfig.configValueSources).forEach(([configName, sources]) => {
sources
.filter((source) => !(0, resolveVikeConfigInternal_js_1.isOverridden)(source, configName, pageConfig))
.forEach((configValueSource) => {
if (!configValueSource.valueIsLoadedWithImport && !configValueSource.valueIsFilePath)
return;
const { definedAt, configEnv } = configValueSource;
if (!configEnv.client)
return;
if (definedAt.definedBy)
return;
if (definedAt.importPathAbsolute) {
const npmPackageName = (0, utils_js_1.getNpmPackageName)(definedAt.importPathAbsolute);
if (npmPackageName && config.optimizeDeps.exclude?.includes(npmPackageName))
return;
}
if (definedAt.filePathAbsoluteUserRootDir !== null) {
// Vite expects entries to be filesystem absolute paths (surprisingly so).
addEntry(definedAt.filePathAbsoluteFilesystem);
}
else {
// Adding definedAtFilePath.filePathAbsoluteFilesystem doesn't work for npm packages, I guess because of Vite's config.server.fs.allow
addInclude(definedAt.importPathAbsolute);
}
});
});
});
}
// V0.4 design
{
const pageFiles = await (0, findPageFiles_js_1.findPageFiles)(config, ['.page', '.page.client'], true);
const userRootDir = config.root;
pageFiles.forEach((filePathAbsoluteUserRootDir) => {
const entry = (0, getFilePath_js_1.getFilePathResolved)({ filePathAbsoluteUserRootDir, userRootDir });
const { filePathAbsoluteFilesystem } = entry;
addEntry(filePathAbsoluteFilesystem);
});
}
entries = (0, utils_js_1.unique)(entries);
include = (0, utils_js_1.unique)(include);
return { entries, include };
}
function getVirtualFiles(config, pageConfigs) {
const { hasClientRouting, hasServerRouting, clientEntries } = (0, pluginBuildConfig_js_1.analyzeClientEntries)(pageConfigs, config);
const entriesVirtualFiles = Object.values(clientEntries);
if (hasClientRouting)
entriesVirtualFiles.push(virtualFileEntry_js_1.virtualFileIdEntryClientCR);
if (hasServerRouting)
entriesVirtualFiles.push(virtualFileEntry_js_1.virtualFileIdEntryClientSR);
return entriesVirtualFiles;
}
function normalizeEntries(entries) {
if ((0, utils_js_1.isArray)(entries))
return entries;
if (typeof entries === 'string')
return [entries];
if (entries === undefined)
return [];
(0, utils_js_1.assert)(false);
}
function normalizeInclude(include) {
if ((0, utils_js_1.isArray)(include))
return include;
if (include === undefined)
return [];
(0, utils_js_1.assert)(false);
}