UNPKG

vike

Version:

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

117 lines (116 loc) 5.77 kB
"use strict"; 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); }