.net core Blazor:如何在JS文件压缩/从不同域加载Blazor应用程序之前运行我的命令
TL;DR:在构建/发布(在asp.net core Blazor应用程序中)JS文件压缩期间,是否有一个.net core Blazor:如何在JS文件压缩/从不同域加载Blazor应用程序之前运行我的命令,.net-core,msbuild,blazor,.net Core,Msbuild,Blazor,TL;DR:在构建/发布(在asp.net core Blazor应用程序中)JS文件压缩期间,是否有一个目标,我可以在csproj中使用该目标在该目标之前运行我的脚本 背景: 我有Blazor前端应用程序,它被加载到不同的web应用程序(不同的域)。所以:主应用程序加载许多其他应用程序,其中一个应用程序是Blazor应用程序(托管在不同的URL) 我所做的:我手动加载\u framework/blazor.webassembly.js,并将autostart属性设置为false,然后手动启动b
目标
,我可以在csproj中使用该目标在该目标
之前运行我的脚本
背景:我有Blazor前端应用程序,它被加载到不同的web应用程序(不同的域)。所以:主应用程序加载许多其他应用程序,其中一个应用程序是Blazor应用程序(托管在不同的URL) 我所做的:我手动加载
\u framework/blazor.webassembly.js
,并将autostart
属性设置为false
,然后手动启动blazor:
Blazor.start({
loadBootResource: (
type: string,
name: string,
defaultUri: string,
integrity: string
) => {
const newUrl = ...;// here I can make some URL replacements for defaultUri
// so my `newUrl` points to place where Blazor app is hosted
return newUrl;
},
})
如下所述:
它工作正常,但没有通过loadbootsource
加载一个文件。它是blazor.boot.json
。加载此文件的代码位于blazor.webassembly.js
(fetch(“\u framework/blazor.boot.json”…
):
本期中也描述了该问题
我还提出了一些可能的解决方案:
我决定用fetch(${someGlobalVariableForSpecificDomainURL}/_framework/blazor.boot.json
)替换fetch(${someGlobalVariableForSpecificDomainURL}/_framework/blazor.boot.json
)的内容,但也有压缩文件(GZ和BR)。如何在开始压缩之前但在生成JS文件之后运行我的脚本进行替换?是否可能?是否有任何Target
可以在csproj中使用?
我不想禁用dotnet文件压缩,也不想覆盖压缩文件(由我自己压缩)
我当前的csproj包含如下内容(压缩后启动的脚本太晚了):
感谢您的帮助或任何建议!如果还有其他解决主要问题的方法,那么我将很高兴看到它(
base
标记不起作用;替换fetch
也不太好).我没有找到任何适合我的目标。问题中的代码工作正常,但只有通过我自己的压缩。所以我恢复了这一点,并完成了覆盖窗口。fetch
以解决主要问题。如果URL包含blazor.boot.json
,则我修改URL并将其传递给原始fetch。加载所有文件后,我将还原原始提取。类似于此处建议的代码:
const originalFetch=window.fetch;
window.fetch=函数(requestInfo,选项){
if(requestInfo=='\u framework/blazor.boot.json'){
返回原始蚀刻('https://example.com/myCustomUrl/blazor.boot.json",选择),;
}否则{
//使用默认逻辑
返回originalFetch.apply(这个,参数);
}
};
我没有找到任何适合我的目标。问题中的代码工作正常,但只有通过我自己的压缩。所以我恢复了这一点,并完成了覆盖窗口的操作。fetch
以解决主要问题。如果URL包含blazor.boot.json
,则我修改URL并将其传递给原始fetch。加载所有文件后,我还原原始提取。类似于此处建议的代码:
const originalFetch=window.fetch;
window.fetch=函数(requestInfo,选项){
if(requestInfo=='\u framework/blazor.boot.json'){
返回原始蚀刻('https://example.com/myCustomUrl/blazor.boot.json",选择),;
}否则{
//使用默认逻辑
返回originalFetch.apply(这个,参数);
}
};
你找到更好的方法了吗?你找到更好的方法了吗?
<Target Name="ReplacementDuringBuild" BeforeTargets="Build">
<Exec WorkingDirectory="$(MyDirWithScripts)" Command="node replace.js --output=$(MSBuildThisFileDirectory)$(OutDir)" />
</Target>
<Target Name="ReplacementDuringPublish" AfterTargets="AfterPublish">
<Exec WorkingDirectory="$(MyDirWithScripts)" Command="node replace.js --output=$(MSBuildThisFileDirectory)$(PublishDir)" />
</Target>