Build CSS with Tailwind 4.3.3 standalone and daisyUI 5.7.47
tools/tailwind.sh downloads the pinned Tailwind binary and daisyUI's .mjs plugins into the gitignored .tools/tailwind/, checking each against a pinned sha256, so neither developers nor CI need Node. MSBuild compiles Styles/app.css into wwwroot/css/app.css (also gitignored) on every build, skipping the step when no source changed. The output is added to Content before ResolveProjectStaticWebAssets, so a clean-clone publish still gets its .gz/.br copies and a service-worker-assets.js entry. index.html now loads css/app.css, plus ionicons as its own stylesheet. The old bundle stays in the tree until the markup is migrated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
This commit is contained in:
1 parent
b9dc865053
commit
3551da1b02
5 files changed
+141
-1
No files matched your search
@@ -26,6 +26,42 @@
|
||||
<ServiceWorker Include="wwwroot\service-worker.js" PublishedContent="wwwroot\service-worker.published.js" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Tailwind CSS standalone + daisyUI (tools/tailwind.sh) compile Styles/app.css into wwwroot/css/app.css on every
|
||||
build. The output is gitignored, so on a clean clone it doesn't exist when the wwwroot\** Content glob is
|
||||
evaluated; IncludeTailwindOutput adds it before ResolveProjectStaticWebAssets, without which it would be
|
||||
published without its .gz/.br copies and outside service-worker-assets.js. -->
|
||||
<PropertyGroup>
|
||||
<TailwindToolsDir>$(MSBuildProjectDirectory)/.tools/tailwind/</TailwindToolsDir>
|
||||
<TailwindExe>$(TailwindToolsDir)tailwindcss</TailwindExe>
|
||||
<TailwindMode Condition="'$(Configuration)' == 'Release'">--minify</TailwindMode>
|
||||
<TailwindMode Condition="'$(TailwindMode)' == ''">--optimize</TailwindMode>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<TailwindSource Include="Styles/**/*.css;**/*.razor;**/*.cs;wwwroot/index.html" Exclude="bin/**;obj/**;.tools/**" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="EnsureTailwindTools" Condition="!Exists('$(TailwindExe)') Or !Exists('$(TailwindToolsDir)daisyui.mjs') Or !Exists('$(TailwindToolsDir)daisyui-theme.mjs')">
|
||||
<Exec Command="bash tools/tailwind.sh fetch" WorkingDirectory="$(MSBuildProjectDirectory)" />
|
||||
</Target>
|
||||
|
||||
<Target Name="TailwindCompile" DependsOnTargets="EnsureTailwindTools"
|
||||
Condition="'$(DesignTimeBuild)' != 'true' And '$(NoBuild)' != 'true' And '$(SkipTailwind)' != 'true'"
|
||||
Inputs="@(TailwindSource);$(TailwindExe);$(TailwindToolsDir)daisyui.mjs;$(TailwindToolsDir)daisyui-theme.mjs;$(MSBuildProjectFullPath)"
|
||||
Outputs="wwwroot/css/app.css;$(IntermediateOutputPath)tailwind.stamp">
|
||||
<Exec Command=""$(TailwindExe)" -i Styles/app.css -o wwwroot/css/app.css $(TailwindMode)" WorkingDirectory="$(MSBuildProjectDirectory)" />
|
||||
<!-- The CLI leaves an unchanged output untouched, which would make this target rerun on every build. -->
|
||||
<Touch Files="wwwroot/css/app.css;$(IntermediateOutputPath)tailwind.stamp" AlwaysCreate="true" />
|
||||
</Target>
|
||||
|
||||
<Target Name="IncludeTailwindOutput" BeforeTargets="ResolveProjectStaticWebAssets" DependsOnTargets="TailwindCompile">
|
||||
<!-- Spelled exactly like the SDK's wwwroot\** glob: publish de-duplicates by comparing OriginalItemSpec strings. -->
|
||||
<ItemGroup>
|
||||
<Content Remove="wwwroot\css\app.css" />
|
||||
<Content Include="wwwroot\css\app.css" Condition="Exists('wwwroot\css\app.css')" />
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="Resources\ErrorMessages.Designer.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
|
||||
Reference in new issue
Block a user