summaryrefslogtreecommitdiff
path: root/packages/integrations/tailwind/src/index.ts
diff options
context:
space:
mode:
authorGravatar Happydev <81974850+MoustaphaDev@users.noreply.github.com> 2023-01-23 15:46:19 +0100
committerGravatar GitHub <noreply@github.com> 2023-01-23 22:46:19 +0800
commit9e57268f1318853b612711b31d7461e9b9ce1978 (patch)
tree25969ec4784621796136c25d55e253be94987bb5 /packages/integrations/tailwind/src/index.ts
parent77ae7a597a8fdd5c939291b4f63237c659a79225 (diff)
downloadastro-9e57268f1318853b612711b31d7461e9b9ce1978.tar.gz
astro-9e57268f1318853b612711b31d7461e9b9ce1978.tar.zst
astro-9e57268f1318853b612711b31d7461e9b9ce1978.zip
fix(@astrojs/tailwind): manually load postcss config file (#5908)
Diffstat (limited to 'packages/integrations/tailwind/src/index.ts')
-rw-r--r--packages/integrations/tailwind/src/index.ts42
1 files changed, 39 insertions, 3 deletions
diff --git a/packages/integrations/tailwind/src/index.ts b/packages/integrations/tailwind/src/index.ts
index 951868e9f..8783d8606 100644
--- a/packages/integrations/tailwind/src/index.ts
+++ b/packages/integrations/tailwind/src/index.ts
@@ -1,5 +1,6 @@
import load, { resolve } from '@proload/core';
import type { AstroIntegration } from 'astro';
+import type { CSSOptions, UserConfig } from 'vite';
import autoprefixerPlugin from 'autoprefixer';
import fs from 'fs/promises';
import path from 'path';
@@ -66,14 +67,46 @@ async function getUserConfig(root: URL, configPath?: string, isRestart = false)
}
}
-function getViteConfiguration(isBuild: boolean, tailwindConfig: TailwindConfig) {
- const postcssPlugins = [tailwindPlugin(tailwindConfig)];
+async function getPostCssConfig(
+ root: UserConfig['root'],
+ postcssInlineOptions: CSSOptions['postcss']
+) {
+ let postcssConfigResult;
+ // Check if postcss config is not inlined
+ if (!(typeof postcssInlineOptions === 'object' && postcssInlineOptions !== null)) {
+ let { default: postcssrc } = await import('postcss-load-config');
+ const searchPath = typeof postcssInlineOptions === 'string' ? postcssInlineOptions : root!;
+ try {
+ postcssConfigResult = await postcssrc({}, searchPath);
+ } catch (e) {
+ postcssConfigResult = null;
+ }
+ }
+ return postcssConfigResult;
+}
+
+async function getViteConfiguration(
+ isBuild: boolean,
+ tailwindConfig: TailwindConfig,
+ viteConfig: UserConfig
+) {
+ // We need to manually load postcss config files because when inlining the tailwind and autoprefixer plugins,
+ // that causes vite to ignore postcss config files
+ const postcssConfigResult = await getPostCssConfig(viteConfig.root, viteConfig.css?.postcss);
+
+ const postcssOptions = (postcssConfigResult && postcssConfigResult.options) || {};
+
+ const postcssPlugins =
+ postcssConfigResult && postcssConfigResult.plugins ? postcssConfigResult.plugins.slice() : [];
+ postcssPlugins.push(tailwindPlugin(tailwindConfig));
+
if (isBuild) {
postcssPlugins.push(autoprefixerPlugin());
}
return {
css: {
postcss: {
+ options: postcssOptions,
plugins: postcssPlugins,
},
},
@@ -131,7 +164,10 @@ export default function tailwindIntegration(options?: TailwindOptions): AstroInt
const tailwindConfig =
(userConfig?.value as TailwindConfig) ?? getDefaultTailwindConfig(config.srcDir);
- updateConfig({ vite: getViteConfiguration(command === 'build', tailwindConfig) });
+
+ updateConfig({
+ vite: await getViteConfiguration(command === 'build', tailwindConfig, config.vite),
+ });
if (applyBaseStyles) {
// Inject the Tailwind base import