-
Issue: Tailwind CSS v4 doesn't scan cross-package content in Vite monorepoEnvironment
Monorepo StructureKey PointOnly the Configurationui/package.json{
"dependencies": {
"react": "^19.0.0"
},
"devDependencies": {
// NO tailwindcss or @tailwindcss/vite
}
}ui/vite.config.tsimport react from '@vitejs/plugin-react';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [react()], // NO tailwindcss() plugin
});docs/package.json{
"devDependencies": {
"@tailwindcss/vite": "^4.1.5",
"tailwindcss": "^4.1.5"
}
}docs/vite.config.tsimport tailwindcss from '@tailwindcss/vite';
import react from '@vitejs/plugin-react';
import { resolve } from 'path';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [react(), tailwindcss()],
resolve: {
alias: {
'@inz-ui/ui': resolve(__dirname, '../ui/src/index.ts'), // Direct source reference
},
},
});docs/src/index.css@import 'tailwindcss';docs/tailwind.config.tsimport type { Config } from 'tailwindcss';
export default {
content: [
'./index.html',
'./src/**/*.{js,ts,jsx,tsx}',
'../ui/src/**/*.{js,ts,jsx,tsx}', // ← UI package source (cross-package)
],
} satisfies Config;ui/src/components/Button.tsxexport const Button = ({ variant = 'primary', children }) => {
return (
<button className="bg-blue-500 text-white px-5 py-2.5 rounded-md">
{children}
</button>
);
};docs/src/App.tsximport { Button } from '@inz-ui/ui'; // Resolves to ../ui/src/index.ts
function App() {
return <Button>Click Me</Button>;
}Expected BehaviorWhen running
Actual Behavior
Workaround That WorksBuild UI separately with its own Tailwind instance
// docs/src/App.tsx
import { Button } from '@inz-ui/ui';
import '@inz-ui/ui/style.css'; // Pre-built CSS from UI packageThis works, but requires:
Attempts to Fix❌ Attempt 1: Import UI's CSS in docs (even without Tailwind in UI)/* docs/src/index.css */
@import 'tailwindcss';
@import '../../ui/src/index.css'; /* Just an empty file or regular CSS */Result: Still doesn't scan UI components ❌ Attempt 2: Absolute path in contentimport { resolve } from 'path';
export default {
content: [resolve(__dirname, '../ui/src/**/*.{js,ts,jsx,tsx}')],
} satisfies Config;Result: No change ❌ Attempt 3: Add custom Vite plugin to pre-process UI filesResult: Too complex, shouldn't be necessary QuestionIs cross-package content scanning supported in Tailwind CSS v4 with This is a fundamental monorepo pattern where:
This pattern is common in:
Additional Notes
The problem appears to be with how |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 2 replies
-
|
V4 does not use a JavaScript config file unless explicitly told to do so (for backwards compatibility). Even then, it does not use the Instead, use a @import 'tailwindcss';
@source "../../ui"; |
Beta Was this translation helpful? Give feedback.
-
|
In a UI package, you should never ship generated CSS or install TailwindCSS and build it (unless it is a standalone project). Dependencies should only provide styles and components; the generated CSS should always be produced by the final project. Related: |
Beta Was this translation helpful? Give feedback.
V4 does not use a JavaScript config file unless explicitly told to do so (for backwards compatibility). Even then, it does not use the
contentconfiguration.Instead, use a
@sourcerule: