在Blazor WASM中使用.NET库的TypeScript编译输出及NuGet打包问题
基础层面
我有一个Blazor WASM应用,需要用到JavaScript,但希望改用TypeScript。添加tsconfig文件后,wwwroot文件夹中的TypeScript会被编译为JS并包含在wwwroot输出中,目前已能在浏览器运行的WASM中正常加载使用。
类库层面
这是第一个核心问题:我想将TypeScript及相关模块迁移到独立的类库项目中,操作步骤如下:
- 创建新的类库项目,在其中新建wwwroot文件夹,将ts文件移入该文件夹,tsconfig文件移至类库根目录
- 在类库中安装
Microsoft.JSInterop包,并从Blazor应用引用该类库
遗憾的是,编译后的JS文件未被包含在应用的输出中,不确定该如何推进。难道必须在应用中添加tsconfig?这显然不合理,应用应该只需直接使用类库提供的内容,类库应能独立完成编译并提供输出,无需应用额外操作。
更新
最初忘记给类库项目添加Microsoft.TypeScript.MSBuild包。添加该包并配置<TypeScriptCompile Include="wwwroot\myFile.ts" />(从初始Blazor WASM项目复制的配置)后,出现错误提示:无法遍历Uint8Array,原因是至少需要es2015环境,但tsconfig.json里的"target"明明设置为es2020,猜测是tsconfig未被正确识别。
更新2
必须将类库创建为Razor类库(.Sdk.Razor),现在TypeScript已能正常编译为JS。随后按照建议将JS文件的复制属性设置为PreserveNewest,当前JS文件已能包含在应用输出中。
新问题
Blazor WASM加载该JS文件时返回404错误,无法正常加载。
下一步:NuGet包
解决上述问题后,我打算将该类库发布为NuGet包,让用户可以直接安装到Blazor WebAssembly项目中,无需自行创建tsconfig或处理JS文件。
之前看到有方案提到要在csproj文件中将JS文件设置为"content",让NuGet在安装时把JS文件复制到应用的wwwroot目录。但我的类库中没有现成的JS文件,只有会编译成JS输出的ts文件,应该如何配置NuGet来获取并复制编译后的JS文件?
内容的提问来源于stack exchange,提问作者Squirrelkiller

