Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Write import map to html files #46233

Merged
merged 28 commits into from
Feb 19, 2025
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
e882406
Copy code from prototype
maraf Jan 22, 2025
ef4843e
Don't generate the manifest to temp file, compute it on the fly
maraf Jan 22, 2025
3550dc0
Build logic
maraf Jan 23, 2025
fcf527f
Remove CSS fingerprinting
maraf Jan 23, 2025
a4582e2
Remove wasm from msbuild property name
maraf Jan 23, 2025
ca1578d
Remove JS fingerprinting
maraf Jan 31, 2025
ea7f7fd
Use empty script type=importmap as a placeholder
maraf Jan 31, 2025
1d8d137
Operate directly on endpoints
maraf Feb 3, 2025
fab6429
Operate directly on endpoints
maraf Feb 3, 2025
9709397
Use fingerprint pattern
maraf Feb 4, 2025
45bf5d7
Publish integration
maraf Feb 5, 2025
b212724
Fix getting publish HTML files
maraf Feb 5, 2025
79e5fb7
Publish test
maraf Feb 5, 2025
ebd6e55
Build test
maraf Feb 5, 2025
c31496e
Enable dotnet.js fingerprinting when targeting .NET 10 or newer
maraf Feb 5, 2025
25a271f
Refactor targets based on JSModule pattern
maraf Feb 6, 2025
961c36e
Swap order of dependencies
maraf Feb 6, 2025
f0d4ea4
Revert changes to GenerateStaticWebAssetEndpointsManifest
maraf Feb 6, 2025
1221414
Merge branch 'main' into maraf/HtmlImportMap
maraf Feb 9, 2025
b5ee5a5
Don't set WasmFingerprintDotnetJs for .NET 10+
maraf Feb 11, 2025
b75bdc9
Feedback on file write & intermediate path
maraf Feb 18, 2025
fb1e38a
Fix build test intermediate path
maraf Feb 18, 2025
06f82a6
Make compression publish dependant HtmlImportMap
maraf Feb 18, 2025
ead64d1
Add service worker dependency
maraf Feb 18, 2025
60b51ff
Remove endpoints for removed html assets
maraf Feb 18, 2025
65fbbab
Merge remote-tracking branch 'upstream/main' into maraf/HtmlImportMap
maraf Feb 19, 2025
33e661a
Run the tests for blazor wasm as well. Remove explicit WasmFingerprin…
maraf Feb 19, 2025
8af2378
Fix reading project name
maraf Feb 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,15 @@ Copyright (c) .NET Foundation. All rights reserved.
<DebuggerSupport Condition="'$(DebuggerSupport)' == '' and '$(Configuration)' != 'Debug'">false</DebuggerSupport>
<BlazorCacheBootResources Condition="'$(BlazorCacheBootResources)' == ''">true</BlazorCacheBootResources>

<_TargetingNETBefore80>$([MSBuild]::VersionLessThan('$(TargetFrameworkVersion)', '8.0'))</_TargetingNETBefore80>
<_TargetingNET80OrLater>$([MSBuild]::VersionGreaterThanOrEquals('$(TargetFrameworkVersion)', '8.0'))</_TargetingNET80OrLater>
<WasmFingerprintDotnetJs>true</WasmFingerprintDotnetJs>
<WasmFingerprintDotnetJs Condition="'$(_TargetingNET80OrLater)' == 'true'">false</WasmFingerprintDotnetJs>
<_TargetingNETBefore100>$([MSBuild]::VersionLessThan('$(TargetFrameworkVersion)', '10.0'))</_TargetingNETBefore100>

<!-- 8 < .NET we want to fingerprint dotnet.js because it's part of the blazor.boot.json which is loaded from blazor.webassembly.js -->
<!-- 8 <= .NET < 10 we don't want to fingerprint dotnet.js because it's path is hardcoded in blazor.webassembly.js -->
<!-- 10 <= .NET we want to leave fingerprinting to WasmSDK because it knows if import maps where applied -->
<WasmFingerprintDotnetJs Condition="'$(_TargetingNETBefore80)' == 'true'">true</WasmFingerprintDotnetJs>
<WasmFingerprintDotnetJs Condition="'$(_TargetingNET80OrLater)' == 'true' and '$(_TargetingNETBefore100)' == 'true'">false</WasmFingerprintDotnetJs>
<WasmEnableWebcil Condition="'$(WasmEnableWebcil)' == '' and ('$(TargetFrameworkIdentifier)' != '.NETCoreApp' or '$(_TargetingNET80OrLater)' != 'true')">false</WasmEnableWebcil>

<!-- Turn off parts of the build that do not apply to Blazor projects -->
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
<!--
***********************************************************************************************
Microsoft.NET.Sdk.StaticWebAssets.HtmlImportMap.targets

WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
created a backup copy. Incorrect changes to this file will make it
impossible to load or build your projects from the command-line or the IDE.

Copyright (c) .NET Foundation. All rights reserved.
***********************************************************************************************
-->

<Project ToolsVersion="14.0">

<UsingTask TaskName="Microsoft.AspNetCore.StaticWebAssets.Tasks.WriteImportMapToHtml" AssemblyFile="$(StaticWebAssetsSdkBuildTasksAssembly)" />

<PropertyGroup>

<!--
ResolveBuildRelatedStaticWebAssets
ResolveHtmlImportMapBuildStaticWebAssets
GenerateHtmlImportMapBuildStaticWebAssets
ResolveHtmlImportMapBuildConfiguration
-->
<ResolveBuildRelatedStaticWebAssetsDependsOn>
$(ResolveBuildRelatedStaticWebAssetsDependsOn);
ResolveHtmlImportMapBuildStaticWebAssets;
</ResolveBuildRelatedStaticWebAssetsDependsOn>
<ResolveCompressedFilesDependsOn>
$(ResolveCompressedFilesDependsOn);
ResolveHtmlImportMapBuildStaticWebAssets
</ResolveCompressedFilesDependsOn>
<ResolveHtmlImportMapBuildStaticWebAssetsDependsOn>
GenerateHtmlImportMapBuildStaticWebAssets;
$(ResolveHtmlImportMapBuildStaticWebAssetsDependsOn)
</ResolveHtmlImportMapBuildStaticWebAssetsDependsOn>
<GenerateHtmlImportMapBuildStaticWebAssetsDependsOn>
ResolveHtmlImportMapBuildConfiguration;
$(GenerateHtmlImportMapBuildStaticWebAssetsDependsOn)
</GenerateHtmlImportMapBuildStaticWebAssetsDependsOn>

<!--
ResolvePublishRelatedStaticWebAssets
ResolveHtmlImportMapPublishStaticWebAssets
GenerateHtmlImportMapPublishStaticWebAssets
ResolveHtmlImportMapPublishConfiguration
-->
<ResolvePublishRelatedStaticWebAssetsDependsOn>
$(ResolvePublishRelatedStaticWebAssetsDependsOn);
ResolveHtmlImportMapPublishStaticWebAssets
</ResolvePublishRelatedStaticWebAssetsDependsOn>
<ResolveHtmlImportMapPublishStaticWebAssetsDependsOn>
GenerateHtmlImportMapPublishStaticWebAssets;
$(ResolveHtmlImportMapPublishStaticWebAssetsDependsOn)
</ResolveHtmlImportMapPublishStaticWebAssetsDependsOn>
<GenerateHtmlImportMapPublishStaticWebAssetsDependsOn>
ResolveHtmlImportMapPublishConfiguration;
$(GenerateHtmlImportMapPublishStaticWebAssetsDependsOn)
</GenerateHtmlImportMapPublishStaticWebAssetsDependsOn>

</PropertyGroup>

<!-- Build -->

<Target Name="ResolveHtmlImportMapBuildConfiguration">
<PropertyGroup>
<_BuildImportMapHtmlPath>$([MSBuild]::NormalizeDirectory($(IntermediateOutputPath), 'importmaphtml', 'build'))</_BuildImportMapHtmlPath>
</PropertyGroup>

<MakeDir Directories="$(_BuildImportMapHtmlPath)"/>

<ItemGroup>
<_HtmlStaticWebAssets Include="@(StaticWebAsset)" Condition="'%(AssetKind)' != 'Publish' and '%(Extension)' == '.html'" />
<_EsModuleCandidate Include="@(StaticWebAsset)" Condition="'%(AssetKind)' != 'Publish'" />
</ItemGroup>

<FilterStaticWebAssetEndpoints Condition="'@(_EsModuleCandidate)' != ''"
Endpoints="@(StaticWebAssetEndpoint)"
Assets="@(_EsModuleCandidate)"
Filters=""
>
<Output TaskParameter="FilteredEndpoints" ItemName="_EsModuleCandidateEndpoints" />
</FilterStaticWebAssetEndpoints>
</Target>

<Target Name="GenerateHtmlImportMapBuildStaticWebAssets" DependsOnTargets="$(GenerateHtmlImportMapBuildStaticWebAssetsDependsOn)">
<WriteImportMapToHtml
Endpoints="@(_EsModuleCandidateEndpoints)"
HtmlFiles="@(_HtmlStaticWebAssets)"
OutputPath="$(_BuildImportMapHtmlPath)">
<Output TaskParameter="HtmlCandidates" ItemName="_HtmlCandidates" />
<Output TaskParameter="HtmlFilesToRemove" ItemName="_HtmlFilesToRemove" />
<Output TaskParameter="FileWrites" ItemName="FileWrites" />
</WriteImportMapToHtml>
</Target>

<Target Name="ResolveHtmlImportMapBuildStaticWebAssets" DependsOnTargets="$(ResolveHtmlImportMapBuildStaticWebAssetsDependsOn)">
<ItemGroup>
<_HtmlCandidatesNoMetadata
Include="@(_HtmlCandidates)"
RemoveMetadata="SourceType;AssetKind;Integrity;Fingerprint" />
<_HtmlCandidatesNoMetadata ContentRoot="$(_BuildImportMapHtmlPath)" />
</ItemGroup>
<DefineStaticWebAssets CandidateAssets="@(_HtmlCandidatesNoMetadata)"
SourceType="Computed"
AssetKind="Build"
>
<Output TaskParameter="Assets" ItemName="_UpdatedHtmlStaticWebAssets" />
</DefineStaticWebAssets>
<DefineStaticWebAssetEndpoints
CandidateAssets="@(_UpdatedHtmlStaticWebAssets)"
ExistingEndpoints="@(StaticWebAssetEndpoint)"
ContentTypeMappings="@(StaticWebAssetContentTypeMapping)"
>
<Output TaskParameter="Endpoints" ItemName="_UpdatedHtmlStaticWebAssetsEndpoint" />
</DefineStaticWebAssetEndpoints>
<ItemGroup>
<StaticWebAsset Remove="@(_HtmlFilesToRemove)" />
<StaticWebAsset Include="@(_UpdatedHtmlStaticWebAssets)" />
<StaticWebAssetEndpoint Include="@(_UpdatedHtmlStaticWebAssetsEndpoint)" />
</ItemGroup>
</Target>

<!-- Publish -->

<Target Name="ResolveHtmlImportMapPublishConfiguration">
<PropertyGroup>
<_PublishImportMapHtmlPath>$([MSBuild]::NormalizeDirectory($(IntermediateOutputPath), 'importmaphtml', 'publish'))</_PublishImportMapHtmlPath>
</PropertyGroup>

<MakeDir Directories="$(_PublishImportMapHtmlPath)"/>

<ItemGroup>
<_EsModuleCandidateForPublish Include="@(StaticWebAsset)" Condition="'%(AssetKind)' != 'Build'" />
</ItemGroup>

<FilterStaticWebAssetEndpoints Condition="'@(_EsModuleCandidateForPublish)' != ''"
Endpoints="@(StaticWebAssetEndpoint)"
Assets="@(_EsModuleCandidateForPublish)"
Filters=""
>
<Output TaskParameter="FilteredEndpoints" ItemName="_EsModuleCandidateForPublishEndpoints" />
</FilterStaticWebAssetEndpoints>
</Target>

<Target Name="GenerateHtmlImportMapPublishStaticWebAssets" DependsOnTargets="$(GenerateHtmlImportMapPublishStaticWebAssetsDependsOn)">
<WriteImportMapToHtml
Endpoints="@(_EsModuleCandidateForPublishEndpoints)"
HtmlFiles="@(_HtmlStaticWebAssets)"
OutputPath="$(_PublishImportMapHtmlPath)">
<Output TaskParameter="HtmlCandidates" ItemName="_HtmlPublishCandidates" />
<Output TaskParameter="HtmlFilesToRemove" ItemName="_HtmlPublishFilesToRemove" />
<Output TaskParameter="FileWrites" ItemName="FileWrites" />
</WriteImportMapToHtml>
</Target>

<Target Name="ResolveHtmlImportMapPublishStaticWebAssets" DependsOnTargets="$(ResolveHtmlImportMapPublishStaticWebAssetsDependsOn)">
<ItemGroup>
<_HtmlPublishCandidatesNoMetadata
Include="@(_HtmlPublishCandidates)"
RemoveMetadata="SourceType;AssetKind;Integrity;Fingerprint" />
<_HtmlPublishCandidatesNoMetadata ContentRoot="$(_PublishImportMapHtmlPath)" />
</ItemGroup>
<DefineStaticWebAssets CandidateAssets="@(_HtmlPublishCandidatesNoMetadata)"
SourceType="Computed"
AssetKind="Publish"
>
<Output TaskParameter="Assets" ItemName="_UpdatedHtmlPublishStaticWebAssets" />
</DefineStaticWebAssets>
<DefineStaticWebAssetEndpoints
CandidateAssets="@(_UpdatedHtmlPublishStaticWebAssets)"
ExistingEndpoints="@(StaticWebAssetEndpoint)"
ContentTypeMappings="@(StaticWebAssetContentTypeMapping)"
>
<Output TaskParameter="Endpoints" ItemName="_UpdatedHtmlPublishStaticWebAssetsEndpoint" />
</DefineStaticWebAssetEndpoints>
<ItemGroup>
<StaticWebAsset Remove="@(_HtmlPublishFilesToRemove)" />
<StaticWebAsset Include="@(_UpdatedHtmlPublishStaticWebAssets)" />
<StaticWebAssetEndpoint Include="@(_UpdatedHtmlPublishStaticWebAssetsEndpoint)" />
</ItemGroup>
</Target>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -737,5 +737,7 @@ Copyright (c) .NET Foundation. All rights reserved.
<Import Project="Microsoft.NET.Sdk.StaticWebAssets.Compression.targets" Condition="'$(CompressionEnabled)' == 'true'" />

<Import Project="Microsoft.NET.Sdk.StaticWebAssets.ServiceWorker.targets" Condition="'$(ServiceWorkerAssetsManifest)' != ''" />

<Import Project="Microsoft.NET.Sdk.StaticWebAssets.HtmlImportMap.targets" Condition="'$(WriteImportMapToHtml)' == 'true'" />

</Project>
Loading
Loading