Simply add Tailwind.targets to your project with the following line.
<Import Project="Tailwind.targets" />
The scripts will look for any .css files in a Styles/ root folder of your project, and add them to the static assets during build.
| <Project> | |
| <Target Name="DetectLddVersion" BeforeTargets="DownloadTailwind" Condition="$([System.OperatingSystem]::IsLinux())"> | |
| <Exec Command="ldd --version" | |
| ConsoleToMsBuild="true" | |
| EchoOff="true" | |
| IgnoreExitCode="true" | |
| StandardOutputImportance="Low" | |
| StandardErrorImportance="Low"> | |
| <Output TaskParameter="ConsoleOutput" PropertyName="LddVersion" /> | |
| </Exec> | |
| <PropertyGroup> | |
| <IsMusl Condition="'$(LddVersion)' != '' And $(LddVersion.Contains('musl'))">true</IsMusl> | |
| </PropertyGroup> | |
| </Target> | |
| <Target Name="DownloadTailwind"> | |
| <PropertyGroup> | |
| <_TailwindVersion Condition=" '$(TailwindVersion)' == '' ">latest</_TailwindVersion> | |
| <_TailwindVersion Condition=" '$(TailwindVersion)' != '' ">$(TailwindVersion)</_TailwindVersion> | |
| <!-- Determine which version of Tailwind to use based on the current OS & architecture --> | |
| <TailwindReleaseName Condition="$([System.OperatingSystem]::IsLinux()) And '$(IsMusl)' == '' And $([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture) == X64">tailwindcss-linux-x64</TailwindReleaseName> | |
| <TailwindReleaseName Condition="$([System.OperatingSystem]::IsLinux()) And '$(IsMusl)' == '' And $([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture) == Arm64">tailwindcss-linux-arm64</TailwindReleaseName> | |
| <TailwindReleaseName Condition="$([System.OperatingSystem]::IsLinux()) And '$(IsMusl)' == 'true' And $([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture) == X64">tailwindcss-linux-x64-musl</TailwindReleaseName> | |
| <TailwindReleaseName Condition="$([System.OperatingSystem]::IsLinux()) And '$(IsMusl)' == 'true' And $([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture) == Arm64">tailwindcss-linux-arm64-musl</TailwindReleaseName> | |
| <TailwindReleaseName Condition="$([System.OperatingSystem]::IsMacOS()) And $([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture) == X64">tailwindcss-macos-x64</TailwindReleaseName> | |
| <TailwindReleaseName Condition="$([System.OperatingSystem]::IsMacOS()) And $([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture) == Arm64">tailwindcss-macos-arm64</TailwindReleaseName> | |
| <TailwindReleaseName Condition="$([System.OperatingSystem]::IsWindows()) And $([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture) == X64">tailwindcss-windows-x64.exe</TailwindReleaseName> | |
| <TailwindReleaseName Condition="$([System.OperatingSystem]::IsWindows()) And $([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture) == Arm64">tailwindcss-windows-arm64.exe</TailwindReleaseName> | |
| <TailwindDownloadUrl Condition="'$(TailwindDownloadUrl)' == '' And $(_TailwindVersion) != 'latest'">https://github.com/tailwindlabs/tailwindcss/releases/download/$(TailwindVersion)/$(TailwindReleaseName)</TailwindDownloadUrl> | |
| <TailwindDownloadUrl Condition="'$(TailwindDownloadUrl)' == '' And $(_TailwindVersion) == 'latest'">https://github.com/tailwindlabs/tailwindcss/releases/latest/download/$(TailwindReleaseName)</TailwindDownloadUrl> | |
| </PropertyGroup> | |
| <!-- Download the file if it hasn't been already --> | |
| <!-- Note: Using latest will always reach out to GitHub to see if a new version is available --> | |
| <DownloadFile DestinationFolder="$(BaseIntermediateOutputPath)tailwind\$(_TailwindVersion)" | |
| DestinationFileName="$(TailwindReleaseName)" | |
| SourceUrl="$(TailwindDownloadUrl)" | |
| SkipUnchangedFiles="true" | |
| Retries="3" | |
| Condition="'$(_TailwindVersion)' == 'latest' Or !Exists('$(TailwindCliPath)')"> | |
| <Output TaskParameter="DownloadedFile" PropertyName="TailwindCliPath" /> | |
| </DownloadFile> | |
| <!-- On unix systems, make the file executable --> | |
| <Exec | |
| Condition="Exists('$(TailwindCliPath)') And ($([System.OperatingSystem]::IsLinux()) Or $([System.OperatingSystem]::IsMacOS()))" | |
| Command="chmod +x '$(TailwindCliPath)'" | |
| EchoOff="true" /> | |
| </Target> | |
| <Target Name="ResolveTailwindAssetOutputs"> | |
| <ItemGroup> | |
| <_TailwindAsset Include="@(None)" Condition="'%(Extension)' == '.css' And $([System.String]::Copy('%(RecursiveDir)').StartsWith('Styles\'))"> | |
| <OutputFile>$(IntermediateOutputPath)%(RecursiveDir)%(FileName)%(Extension)</OutputFile> | |
| </_TailwindAsset> | |
| </ItemGroup> | |
| <ItemGroup> | |
| <UpToDateCheckInput Include="%(_TailwindAsset.Identity)" Set="Css" /> | |
| <UpToDateCheckBuilt Include="%(_TailwindAsset.OutputFile)" Original="%(_TailwindAsset.Identity)" Set="Css" /> | |
| </ItemGroup> | |
| </Target> | |
| <Target Name="BuildTailwindAssets" DependsOnTargets="DownloadTailwind;ResolveTailwindAssetOutputs"> | |
| <Exec Command="$(TailwindCliPath) -i @(_TailwindAsset) -o %(OutputFile)" Condition="'$(Optimize)' == 'false'" /> | |
| <Exec Command="$(TailwindCliPath) -i @(_TailwindAsset) -o %(OutputFile) --minify" Condition="'$(Optimize)' == 'true'" /> | |
| <ItemGroup> | |
| <FileWrites Include="%(_TailwindAsset.OutputFile)" /> | |
| </ItemGroup> | |
| </Target> | |
| <Target Name="ResolveTailwindStaticWebAsset" Condition="'$(NoBuild)' != 'true'" | |
| BeforeTargets="AssignTargetPaths" | |
| DependsOnTargets="ResolveStaticWebAssetsConfiguration;BuildTailwindAssets"> | |
| <DefineStaticWebAssets | |
| CandidateAssets="%(_TailwindAsset.OutputFile)" | |
| RelativePathPattern="$(IntermediateOutputPath)%(_TailwindAsset.RelativeDir)**" | |
| SourceType="Discovered" | |
| SourceId="$(PackageId)" | |
| ContentRoot="$(IntermediateOutputPath)%(_TailwindAsset.RelativeDir)" | |
| BasePath="$(StaticWebAssetBasePath)"> | |
| <Output TaskParameter="Assets" ItemName="StaticWebAsset" /> | |
| <Output TaskParameter="Assets" ItemName="_CurrentProjectStaticWebAsset" /> | |
| </DefineStaticWebAssets> | |
| <DefineStaticWebAssetEndpoints | |
| CandidateAssets="@(_CurrentProjectStaticWebAsset)" | |
| ContentTypeMappings="@(StaticWebAssetContentTypeMapping)" | |
| > | |
| <Output TaskParameter="Endpoints" ItemName="StaticWebAssetEndpoint" /> | |
| </DefineStaticWebAssetEndpoints> | |
| </Target> | |
| </Project> |