diff --git a/eng/targets/Npm.Common.targets b/eng/targets/Npm.Common.targets
index 062a9d3a8f76de24f32aa1dfcceb448e563e47a1..7695ed7039d409f265cc4a2a7d7b2083bb2d6eb1 100644
--- a/eng/targets/Npm.Common.targets
+++ b/eng/targets/Npm.Common.targets
@@ -20,16 +20,20 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <TSFiles Include="$(MSBuildProjectDirectory)\*\*.ts" />
-    <TSFiles Include="$(MSBuildProjectDirectory)\package.json" />
-    <TSFiles Include="$(MSBuildProjectDirectory)\*.npmproj" />
+    <TSFiles Include="src\**\*.ts" />
+    <TSFiles Include="test\**\*.ts" />
+    <TSFiles Include="package.json" />
+    <TSFiles Include="*.npmproj" />
+
+    <BuildOutputFiles Include="$(BaseIntermediateOutputPath)\build-sentinel" />
+    <BuildOutputFiles Include="dist\**\*.js" />
   </ItemGroup>
 
   <Target Name="_CheckForInvalidConfiguration">
     <Error Text="Missing expected property: PackageId" Condition="'$(IsPackable)' != 'false' and '$(PackageId)' == ''" />
 
-    <Exec ContinueOnError="true" Command="node -v">
-       <Output TaskParameter="ExitCode" PropertyName="ErrorCode"/>
+    <Exec ContinueOnError="true" Command="node -v" StandardOutputImportance="Low">
+      <Output TaskParameter="ExitCode" PropertyName="ErrorCode"/>
     </Exec>
 
     <Error Text="Building *.npmproj but NodeJS was not detected on path. Ensure NodeJS is on path or disable building NodeJS projects with /p:BuildNodeJs=false. Skipping NodeJS projects will also skip managed projects depending on them, including Components, Mvc and Analysers." Condition="'$(ErrorCode)' != '0'"/>
@@ -53,12 +57,25 @@
     <CallTarget Targets="_Pack" Condition="'$(PackOnBuild)' == 'true'" />
   </Target>
 
+  <Target Name="GetBuildInputCacheFile">
+    <Hash ItemsToHash="@(TSFiles)">
+      <Output TaskParameter="HashResult" PropertyName="_TSFileHash" />
+    </Hash>
+
+    <WriteLinesToFile
+      Lines="$(_TSFileHash)"
+      File="$(BaseIntermediateOutputPath)tsfiles.cache"
+      Overwrite="True"
+      WriteOnlyWhenDifferent="True" />
+  </Target>
+
   <Target Name="_Build"
     Condition="'$(IsBuildable)' != 'false'"
-    Inputs="@(TSFiles)"
-    Outputs="$(BaseIntermediateOutputPath)\build-sentinel" >
+    DependsOnTargets="GetBuildInputCacheFile"
+    Inputs="@(TSFiles);$(BaseIntermediateOutputPath)tsfiles.cache"
+    Outputs="@(BuildOutputFiles)">
     <Yarn Command="$(NpmBuildArgs)" StandardOutputImportance="High" StandardErrorImportance="High" />
-    <WriteLinesToFile Overwrite="true" File="$(BaseIntermediateOutputPath)\build-sentinel" />
+    <WriteLinesToFile Overwrite="true" File="$(BaseIntermediateOutputPath)build-sentinel" />
   </Target>
 
   <PropertyGroup>
@@ -73,7 +90,10 @@
     </PackDependsOn>
   </PropertyGroup>
 
-  <Target Name="_Pack" Condition="'$(IsPackable)' == 'true'" >
+  <Target Name="_Pack" Condition="'$(IsPackable)' == 'true'"
+      Inputs="@(TSFiles)"
+      Outputs="$(PackageOutputPath)\$(PackageFileName)">
+
     <PropertyGroup>
       <_PackageTargetPath>$(MSBuildProjectDirectory)\$(PackageFileName)</_PackageTargetPath>
     </PropertyGroup>
diff --git a/src/Components/Web.JS/Microsoft.AspNetCore.Components.Web.JS.npmproj b/src/Components/Web.JS/Microsoft.AspNetCore.Components.Web.JS.npmproj
index 8e0a17ece09e028f65c0c3b72079527d981d10c4..cb890a62b8796bfde12e3b550e26a0782ff3e7ae 100644
--- a/src/Components/Web.JS/Microsoft.AspNetCore.Components.Web.JS.npmproj
+++ b/src/Components/Web.JS/Microsoft.AspNetCore.Components.Web.JS.npmproj
@@ -6,6 +6,11 @@
     <IsPackable>false</IsPackable>
   </PropertyGroup>
 
+  <ItemGroup>
+    <BuildOutputFiles Include="dist\release\blazor.server.js" />
+    <BuildOutputFiles Include="dist\release\blazor.webassembly.js" />
+  </ItemGroup>
+
   <ItemGroup>
     <ProjectReference
       Include="..\..\SignalR\clients\ts\signalr\signalr.npmproj"
diff --git a/src/Components/Web.JS/dist/Release/blazor.server.js b/src/Components/Web.JS/dist/Release/blazor.server.js
index 3d73bad3e0e1e2f84b9b4ded620fadb212c7b1de..79e87de6695d06841cc2032f0bb3351456d7c1fd 100644
Binary files a/src/Components/Web.JS/dist/Release/blazor.server.js and b/src/Components/Web.JS/dist/Release/blazor.server.js differ
diff --git a/src/SignalR/clients/ts/signalr-protocol-msgpack/signalr-protocol-msgpack.npmproj b/src/SignalR/clients/ts/signalr-protocol-msgpack/signalr-protocol-msgpack.npmproj
index 72978faa2decd4a5c7a566f4786ed82fcf22a787..1a2b2deac3db3f1be917356756320c8bfa8962a8 100644
--- a/src/SignalR/clients/ts/signalr-protocol-msgpack/signalr-protocol-msgpack.npmproj
+++ b/src/SignalR/clients/ts/signalr-protocol-msgpack/signalr-protocol-msgpack.npmproj
@@ -13,5 +13,9 @@
     <ProjectReference Include="..\signalr\signalr.npmproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <BuildOutputFiles Include="dist\browser\signalr-protocol-msgpack.js" />
+  </ItemGroup>
+
   <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), Directory.Build.targets))\Directory.Build.targets" />
 </Project>
diff --git a/src/SignalR/clients/ts/signalr/signalr.npmproj b/src/SignalR/clients/ts/signalr/signalr.npmproj
index e6a6c1d99305df325b30d2f26a86e44fb5195c21..dbd62e31c645516cb4a31f4518d440d68625cb90 100644
--- a/src/SignalR/clients/ts/signalr/signalr.npmproj
+++ b/src/SignalR/clients/ts/signalr/signalr.npmproj
@@ -8,5 +8,10 @@
     <IsShippingPackage>true</IsShippingPackage>
   </PropertyGroup>
 
+  <ItemGroup>
+    <BuildOutputFiles Include="dist\browser\signalr.js" />
+    <BuildOutputFiles Include="dist\webworker\signalr.js" />
+  </ItemGroup>
+
   <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), Directory.Build.targets))\Directory.Build.targets" />
 </Project>