diff --git a/docs/generated/packages/vite/executors/build.json b/docs/generated/packages/vite/executors/build.json index 303a64a04b..414cca2ed1 100644 --- a/docs/generated/packages/vite/executors/build.json +++ b/docs/generated/packages/vite/executors/build.json @@ -16,6 +16,11 @@ "x-completion-type": "directory", "x-priority": "important" }, + "buildLibsFromSource": { + "type": "boolean", + "description": "Read buildable libraries from source instead of building them separately.", + "default": true + }, "base": { "type": "string", "description": "Base public path when served in development or production.", diff --git a/docs/generated/packages/vite/executors/dev-server.json b/docs/generated/packages/vite/executors/dev-server.json index 1d85a0c788..3c8f4707a7 100644 --- a/docs/generated/packages/vite/executors/dev-server.json +++ b/docs/generated/packages/vite/executors/dev-server.json @@ -18,6 +18,11 @@ "description": "Target which builds the application. Only used to retrieve the configuration as the dev-server does not build the code.", "x-priority": "important" }, + "buildLibsFromSource": { + "type": "boolean", + "description": "Read buildable libraries from source instead of building them separately.", + "default": true + }, "proxyConfig": { "type": "string", "description": "Path to the proxy configuration file.", diff --git a/packages/vite/src/executors/build/build.impl.ts b/packages/vite/src/executors/build/build.impl.ts index 48779fa937..0e102e9915 100644 --- a/packages/vite/src/executors/build/build.impl.ts +++ b/packages/vite/src/executors/build/build.impl.ts @@ -4,6 +4,7 @@ import { build, InlineConfig, mergeConfig } from 'vite'; import { getViteBuildOptions, getViteSharedConfig, + registerPaths, } from '../../utils/options-utils'; import { ViteBuildExecutorOptions } from './schema'; import { @@ -16,8 +17,6 @@ import { existsSync, writeFileSync } from 'fs'; import { resolve } from 'path'; import { createAsyncIterable } from '@nx/devkit/src/utils/async-iterable'; -import { registerTsConfigPaths } from '@nx/js/src/internal'; - export async function* viteBuildExecutor( options: ViteBuildExecutorOptions, context: ExecutorContext @@ -25,7 +24,7 @@ export async function* viteBuildExecutor( const projectRoot = context.projectsConfigurations.projects[context.projectName].root; - registerTsConfigPaths(resolve(projectRoot, 'tsconfig.json')); + registerPaths(projectRoot, options, context); const normalizedOptions = normalizeOptions(options); diff --git a/packages/vite/src/executors/build/schema.d.ts b/packages/vite/src/executors/build/schema.d.ts index f710f4d5c3..894fe1e121 100644 --- a/packages/vite/src/executors/build/schema.d.ts +++ b/packages/vite/src/executors/build/schema.d.ts @@ -18,4 +18,5 @@ export interface ViteBuildExecutorOptions { generatePackageJson?: boolean; includeDevDependenciesInPackageJson?: boolean; cssCodeSplit?: boolean; + buildLibsFromSource?: boolean; } diff --git a/packages/vite/src/executors/build/schema.json b/packages/vite/src/executors/build/schema.json index 09c9568ad6..d8358ba705 100644 --- a/packages/vite/src/executors/build/schema.json +++ b/packages/vite/src/executors/build/schema.json @@ -18,6 +18,11 @@ "x-completion-type": "directory", "x-priority": "important" }, + "buildLibsFromSource": { + "type": "boolean", + "description": "Read buildable libraries from source instead of building them separately.", + "default": true + }, "base": { "type": "string", "description": "Base public path when served in development or production.", diff --git a/packages/vite/src/executors/dev-server/dev-server.impl.ts b/packages/vite/src/executors/dev-server/dev-server.impl.ts index e4665d2c75..84954a1ccc 100644 --- a/packages/vite/src/executors/dev-server/dev-server.impl.ts +++ b/packages/vite/src/executors/dev-server/dev-server.impl.ts @@ -7,6 +7,7 @@ import { getNxTargetOptions, getViteServerOptions, getViteBuildOptions, + registerPaths, } from '../../utils/options-utils'; import { ViteDevServerExecutorOptions } from './schema'; @@ -14,6 +15,11 @@ import { ViteBuildExecutorOptions } from '../build/schema'; import { registerTsConfigPaths } from '@nx/js/src/internal'; import { resolve } from 'path'; +import { + calculateProjectDependencies, + createTmpTsConfig, +} from '@nx/js/src/utils/buildable-libs-utils'; + export async function* viteDevServerExecutor( options: ViteDevServerExecutorOptions, context: ExecutorContext @@ -21,7 +27,7 @@ export async function* viteDevServerExecutor( const projectRoot = context.projectsConfigurations.projects[context.projectName].root; - registerTsConfigPaths(resolve(projectRoot, 'tsconfig.json')); + registerPaths(projectRoot, options, context); // Retrieve the option for the configured buildTarget. const buildTargetOptions: ViteBuildExecutorOptions = getNxTargetOptions( diff --git a/packages/vite/src/executors/dev-server/schema.d.ts b/packages/vite/src/executors/dev-server/schema.d.ts index e2c9df62f7..533ab792ab 100644 --- a/packages/vite/src/executors/dev-server/schema.d.ts +++ b/packages/vite/src/executors/dev-server/schema.d.ts @@ -1,5 +1,6 @@ export interface ViteDevServerExecutorOptions { buildTarget: string; + buildLibsFromSource?: boolean; proxyConfig?: string; port?: number; host?: string | boolean; diff --git a/packages/vite/src/executors/dev-server/schema.json b/packages/vite/src/executors/dev-server/schema.json index 41c1ab6242..a011c21bc0 100644 --- a/packages/vite/src/executors/dev-server/schema.json +++ b/packages/vite/src/executors/dev-server/schema.json @@ -21,6 +21,11 @@ "description": "Target which builds the application. Only used to retrieve the configuration as the dev-server does not build the code.", "x-priority": "important" }, + "buildLibsFromSource": { + "type": "boolean", + "description": "Read buildable libraries from source instead of building them separately.", + "default": true + }, "proxyConfig": { "type": "string", "description": "Path to the proxy configuration file.", diff --git a/packages/vite/src/utils/options-utils.ts b/packages/vite/src/utils/options-utils.ts index c0166fb20f..9bde2cb508 100644 --- a/packages/vite/src/utils/options-utils.ts +++ b/packages/vite/src/utils/options-utils.ts @@ -6,7 +6,7 @@ import { readTargetOptions, } from '@nx/devkit'; import { existsSync } from 'fs'; -import { relative } from 'path'; +import { relative, resolve } from 'path'; import { BuildOptions, InlineConfig, @@ -19,6 +19,11 @@ import { ViteDevServerExecutorOptions } from '../executors/dev-server/schema'; import { VitePreviewServerExecutorOptions } from '../executors/preview-server/schema'; import replaceFiles from '../../plugins/rollup-replace-files.plugin'; import { ViteBuildExecutorOptions } from '../executors/build/schema'; +import { registerTsConfigPaths } from '@nx/js/src/internal'; +import { + calculateProjectDependencies, + createTmpTsConfig, +} from '@nx/js/src/utils/buildable-libs-utils'; /** * Returns the path to the vite config file or undefined when not found. @@ -188,3 +193,32 @@ export function getNxTargetOptions(target: string, context: ExecutorContext) { const targetObj = parseTargetString(target, context.projectGraph); return readTargetOptions(targetObj, context); } + +export function registerPaths( + projectRoot: string, + options: ViteBuildExecutorOptions | ViteDevServerExecutorOptions, + context: ExecutorContext +) { + const tsConfig = resolve(projectRoot, 'tsconfig.json'); + options.buildLibsFromSource ??= true; + + if (!options.buildLibsFromSource) { + const { dependencies } = calculateProjectDependencies( + context.projectGraph, + context.root, + context.projectName, + context.targetName, + context.configurationName + ); + const tmpTsConfig = createTmpTsConfig( + tsConfig, + context.root, + projectRoot, + dependencies + ); + + registerTsConfigPaths(tmpTsConfig); + } else { + registerTsConfigPaths(tsConfig); + } +}