TinyVFS
TinyVFS
是一個虛擬文件系統,受ABP vNext框架的啟發。它可以將js、css、image、cshtml等文件嵌入到程序集中,
並在運行時可以將它們像物理文件一樣去使用。
特點
- 在單體應用中,它可以將前端和后台(管理系統)分到單獨項目工程中
- 在開發中它可以讓開發人員同時進行開發不同的業務或者模塊
- 它可以讓我們將系統功能模塊拆分后組裝到一起
快速入門
1、通過Nuget安裝組件
Install-Package TinyVFS
2、注冊嵌入文件
編輯web資源項目.csproj
<ItemGroup>
<EmbeddedResource Include="MyResources\**\*.*" />
<Content Remove="MyResources\**\*.*" />
</ItemGroup>
通過如下代碼片段將文件嵌入到虛擬文件系統。
services.AddVirtualFilesService();
services.Configure<VirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<WebApplication1.Pages.IndexModel>("WebResources");
});
3、獲取虛擬文件
嵌入到程序集后可通過IVirtualFileProvider
來獲取文件或者目錄內容
public class MyService
{
private readonly IVirtualFileProvider _virtualFileProvider;
public MyService(IVirtualFileProvider virtualFileProvider)
{
_virtualFileProvider = virtualFileProvider;
}
public void Foo()
{
//Getting a single file
var file = _virtualFileProvider.GetFileInfo("/MyResources/js/test.js");
var fileContent = file.ReadAsString(); //ReadAsString is an extension method of ABP
//Getting all files/directories under a directory
var directoryContents = _virtualFileProvider.GetDirectoryContents("/MyResources/js");
}
}
4、動態監聽文件
當我們在本機進行開發時,也許我們會對資源項目中的靜態文件進行修改,那么常規操作可以能我們去重新生成代碼.....
現在我們可以通過ReplaceEmbeddedByPhysical
來通過瀏覽器刷新即可獲取最新的文件信息
services.AddVirtualFilesService();
services.Configure<VirtualFileSystemOptions>(options =>
{
options.FileSets.ReplaceEmbeddedByPhysical<WebApplication1.Pages.IndexModel>(
Path.Combine(WebHostEnvironment.ContentRootPath, "..\\WebResources")
);
});
5、虛擬文件中間件
虛擬文件中間件用於向客戶端/瀏覽器提供嵌入式(js, css, image ...)文件,
就像 wwwroot 文件夾中的物理(靜態)文件一樣. 在靜態文件中間件之后添加它, 如下所示:
app.UseVirtualFiles();
如果想擴展其他文件格式那么,可使用重載方法,如下所示:
var provider = new FileExtensionContentTypeProvider();
provider.Mappings[".less"] = "text/css";
app.UseVirtualFiles(provider);
通過設置虛擬文件中間件,使在虛擬文件相同的位置放置物理文件,從而使物理文件覆蓋虛擬文件成為可能。
6、ASP.NET Core集成
虛擬文件可以直接集成到ASP.NET Core中
· 虛擬文件可以像Web應用程序中的物理靜態文件一樣使用。
· Razor Views, Razor Pages, js, css, 圖像文件和所有其他Web內容可以嵌入到程序集中並像物理文件一樣使用。
· 應用程序可以覆蓋模塊(web資源)的虛擬文件, 就像將具有相同名稱和擴展名的文件放入虛擬文件的同一文件夾中一樣.
7、Views & Pages
它們不需要任何配置,可在我們應用程序中使用,當我們物理目錄存在這些文件時,則覆蓋虛擬文件。