UNPKG

vike

Version:

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

111 lines (110 loc) 5.41 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 getVikeConfig_js_1 = require("../importUserCode/v1-design/getVikeConfig.js"); const pluginBuildConfig_js_1 = require("../build/pluginBuildConfig.js"); const virtualFileImportUserCode_js_1 = require("../../../shared/virtual-files/virtualFileImportUserCode.js"); const getFilePath_js_1 = require("../../shared/getFilePath.js"); const debug = (0, utils_js_1.createDebugger)('vike:optimizeDeps'); async function determineOptimizeDeps(config) { const { pageConfigs } = await (0, getVikeConfig_js_1.getVikeConfig)(config); 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, getVikeConfig_js_1.isOverriden)(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.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(virtualFileImportUserCode_js_1.virtualFileIdImportUserCodeClientCR); if (hasServerRouting) entriesVirtualFiles.push(virtualFileImportUserCode_js_1.virtualFileIdImportUserCodeClientSR); 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); }