Skip to content

Commit 83b943a

Browse files
clydindgp1130
authored andcommitted
refactor(@angular-devkit/build-angular): use single search directory list for postcss/tailwind configuration setup
Both the postcss and tailwind configuration file searching during the `application` builder setup look in the project and workspace root for one of the related configuration files. To avoid unneeded repeat file access, both searches now reuse directory contents information.
1 parent f97c0f3 commit 83b943a

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

packages/angular_devkit/build_angular/src/builders/application/options.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@ import { useJSONBuildLogs } from '../../utils/environment-options';
1818
import { I18nOptions, createI18nOptions } from '../../utils/i18n-options';
1919
import { IndexHtmlTransform } from '../../utils/index-file/index-html-generator';
2020
import { normalizeCacheOptions } from '../../utils/normalize-cache';
21-
import { loadPostcssConfiguration } from '../../utils/postcss-configuration';
22-
import { findTailwindConfigurationFile } from '../../utils/tailwind';
21+
import {
22+
SearchDirectory,
23+
findTailwindConfiguration,
24+
generateSearchDirectories,
25+
loadPostcssConfiguration,
26+
} from '../../utils/postcss-configuration';
2327
import {
2428
Schema as ApplicationBuilderOptions,
2529
I18NTranslation,
@@ -182,11 +186,13 @@ export async function normalizeOptions(
182186
}
183187
}
184188

185-
const postcssConfiguration = await loadPostcssConfiguration(workspaceRoot, projectRoot);
189+
// A configuration file can exist in the project or workspace root
190+
const searchDirectories = await generateSearchDirectories([projectRoot, workspaceRoot]);
191+
const postcssConfiguration = await loadPostcssConfiguration(searchDirectories);
186192
// Skip tailwind configuration if postcss is customized
187193
const tailwindConfiguration = postcssConfiguration
188194
? undefined
189-
: await getTailwindConfig(workspaceRoot, projectRoot, context);
195+
: await getTailwindConfig(searchDirectories, workspaceRoot, context);
190196

191197
const globalStyles = normalizeGlobalEntries(options.styles, 'styles');
192198
const globalScripts = normalizeGlobalEntries(options.scripts, 'scripts');
@@ -349,18 +355,18 @@ export async function normalizeOptions(
349355
}
350356

351357
async function getTailwindConfig(
358+
searchDirectories: SearchDirectory[],
352359
workspaceRoot: string,
353-
projectRoot: string,
354360
context: BuilderContext,
355361
): Promise<{ file: string; package: string } | undefined> {
356-
const tailwindConfigurationPath = await findTailwindConfigurationFile(workspaceRoot, projectRoot);
362+
const tailwindConfigurationPath = findTailwindConfiguration(searchDirectories);
357363

358364
if (!tailwindConfigurationPath) {
359365
return undefined;
360366
}
361367

362-
// Create a node resolver at the project root as a directory
363-
const resolver = createRequire(projectRoot + '/');
368+
// Create a node resolver from the configuration file
369+
const resolver = createRequire(tailwindConfigurationPath);
364370
try {
365371
return {
366372
file: tailwindConfigurationPath,

packages/angular_devkit/build_angular/src/utils/postcss-configuration.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,19 @@ interface RawPostcssConfiguration {
1818
}
1919

2020
const postcssConfigurationFiles: string[] = ['postcss.config.json', '.postcssrc.json'];
21-
22-
interface SearchDirectory {
21+
const tailwindConfigFiles: string[] = [
22+
'tailwind.config.js',
23+
'tailwind.config.cjs',
24+
'tailwind.config.mjs',
25+
'tailwind.config.ts',
26+
];
27+
28+
export interface SearchDirectory {
2329
root: string;
2430
files: Set<string>;
2531
}
2632

27-
async function generateSearchDirectories(roots: string[]): Promise<SearchDirectory[]> {
33+
export async function generateSearchDirectories(roots: string[]): Promise<SearchDirectory[]> {
2834
return await Promise.all(
2935
roots.map((root) =>
3036
readdir(root, { withFileTypes: true }).then((entries) => ({
@@ -50,6 +56,12 @@ function findFile(
5056
return undefined;
5157
}
5258

59+
export function findTailwindConfiguration(
60+
searchDirectories: SearchDirectory[],
61+
): string | undefined {
62+
return findFile(searchDirectories, tailwindConfigFiles);
63+
}
64+
5365
async function readPostcssConfiguration(
5466
configurationFile: string,
5567
): Promise<RawPostcssConfiguration> {
@@ -60,12 +72,8 @@ async function readPostcssConfiguration(
6072
}
6173

6274
export async function loadPostcssConfiguration(
63-
workspaceRoot: string,
64-
projectRoot: string,
75+
searchDirectories: SearchDirectory[],
6576
): Promise<PostcssConfiguration | undefined> {
66-
// A configuration file can exist in the project or workspace root
67-
const searchDirectories = await generateSearchDirectories([projectRoot, workspaceRoot]);
68-
6977
const configPath = findFile(searchDirectories, postcssConfigurationFiles);
7078
if (!configPath) {
7179
return undefined;

0 commit comments

Comments
 (0)