- Published on
Release of 1.0.0-beta.4
Breaking change:
- Use
builder.WebHost.UseStaticWebAssets();
to ensure static assets are copied to the output folder. See One little catch for more info.
Static web assets are always copied
tl;dr: It works as expected, just add builder.WebHost.UseStaticWebAssets();
to your Program.cs
.
Previously, it wasn't possible to copy static web assets from a Razor class library to the output folder. These assets,
residing in the NuGet cache, are served by the framework. Static web assets from RCLs (e.g., CSS files or images) are
accessed through the _content/
path and are copied to the wwwroot
folder upon publishing. However, BlazorStatic is
designed to output the entire website, even during development (without publishing). An addition was made to copy the
static web assets from RLCs using app.Environment.WebRootFileProvider
.
Now, you can use any NuGet package with static web assets (for example, FluentUI; check how it runs with BlazorStatic), and it will work as expected.
This also addresses the lack of support for scoped CSS in BlazorStatic. Use scoped CSS as you normally would.
One little catch (with one-liner solution)
BlazorStatic now relies on app.Environment.WebRootFileProvider
to copy static web assets. You need to enable
StaticWebAssets
. In non-dev environments (Staging, Production, etc.), StaticWebAssets
are turned off. The issue is
described here (
with older .NET, but the principle is the same):
See it in the WebHost.cs
file in
the aspnetcore repo:
This becomes a problem when switching the ASPNETCORE_ENVIRONMENT
to anything other than Development, which I recommend
doing in GitHub Actions workflows (or similar).
The problem results in missing static web assets (CSS, images, etc.) in the output folder.
How to prevent this? Easily by activating StaticWebAssets
in your Program.cs
:
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseStaticWebAssets(); //👈
You might wonder: "Aren't StaticWebAssets turned off in prod for a reason?"
Yes, but: (simply put) for apps that run on a server.
A web app using BlazorStatic is meant for quick static website generation, not server deployment.
If you need to disable StaticWebAssets
, consider this workaround:
- Add the
wwwroot
folder toopt.ContentToCopyToOutput
. - Publish the app before running.
I haven't tested this; let me know if you need it. I am curious about the use case.
.nojekyll file on GitHub Pages
- Don't forget to add
.nojekyll
file to yourwwwroot
folder, otherwise GitHub Pages will ignore folders starting with underscore_
(e.g._content
). more info - The best way is to use build pipeline for that
IsDraft property in default FrontMatter is now supported
First merged PR from community! Thanks to Chris Gonzales for this contribution.
Default FrontMatter
has now support for IsDraft
property.
If you set it to true
the page will be ignored during generation. A useful feature indeed.
Note: You don't have to use the default FrontMatter at all. You can tailor the front matter class based on your markdown posts' structure.
Ignoring files for the generation works
To ignore certain files, configure it in Program.cs
:
builder.Services.AddBlazorStaticService(opt => {
opt.IgnoredPathsOnContentCopy.AddRange(new[] { "app.css" });
});
For example, I ignore the app.css
file used by TailwindCSS to create the final CSS version (app.min.css
).
There's no need to keep app.css
in the output.