Vite.AspNetCore
1.6.1
See the version list below for details.
dotnet add package Vite.AspNetCore --version 1.6.1
NuGet\Install-Package Vite.AspNetCore -Version 1.6.1
<PackageReference Include="Vite.AspNetCore" Version="1.6.1" />
paket add Vite.AspNetCore --version 1.6.1
#r "nuget: Vite.AspNetCore, 1.6.1"
// Install Vite.AspNetCore as a Cake Addin #addin nuget:?package=Vite.AspNetCore&version=1.6.1 // Install Vite.AspNetCore as a Cake Tool #tool nuget:?package=Vite.AspNetCore&version=1.6.1
Vite.AspNetCore
This library offers integration with ViteJS to be used in ASP.NET applications. It's made to work mainly with MPA (Multi-Page Application) apps, compatible with:
- Blazor Server
- MVC
- Razor Pages
Features
This library has three simple but very useful features:
- A Middleware to forward the requests to the Vite Development Server
- The middleware can be start the Vite Development Server for you ❤️.
- A service to access the Vite manifest.
- Tag Helpers for script and link tags.
Setup
Install the package from NuGet.
dotnet add package Vite.AspNetCore
Add the following lines to your Program.cs
or Startup
class.
using Vite.AspNetCore.Extensions;
// ---- Service Configuration ----
// Add Vite services.
builder.Services.AddViteServices();
// ---- App Configuration ----
// Use Middleware in development environment.
if (app.Environment.IsDevelopment())
{
// Enable the Middleware to use the Vite Development Server.
app.UseViteDevMiddleware();
}
Usage
The Vite Middleware
The common way to access Vite Development Server assets in your application is by using the following template, specifying the local URL where Vite Server is running.
<environment include="Development">
<script type="module" src="http://localhost:5173/@@vite/client"></script>
<script type="module" src="http://localhost:5173/main.js"></script>
</environment>
<environment include="Development">
<img src="http://localhost:5173/assets/logo.svg" alt="Vite Logo" />
</environment>
<environment exclude="Development">
<img src="~/assets/logo.svg" alt="Vite Logo" />
</environment>
Having to set up two ways to access public assets in different environments doesn't look very good. It can also be a problem in some circumstances. Service workers, for example, cannot be properly tested this way and if you are using preprocessors like SASS, you have probably noticed that your 'url()'s are not resolved correctly during development. But don't worry, this middleware will solve all those problems for you.
By using the vite middleware during development, you don't need to pass the development server URL. You can use aspnet paths as usual.
<environment include="Development">
<script type="module" src="~/@@vite/client"></script>
<script type="module" src="~/main.js"></script>
</environment>
<img src="~/assets/logo.svg" alt="Vite Logo" />
The middleware will proxy all requests to the Vite Development Server. You won't need alternative paths for images or other resources from your public assets. 🙀🙀🙀
Note: The middleware can start the Vite Development Server for you. Enable this feature by setting the
Vite:Server:AutoRun
property totrue
. But remember, you need to have yourpackage.json
file in your project root folder.It's possible that while using the
AutoRun
option, the Vite Development Server keeps running after you stop the application. If this happens, try to enable theVite:Server:KillPort
option to kill the port before a new process starts.
The Vite Manifest
The Vite Manifest is a JSON file that contains the mapping between the original file names and the hashed names. This is useful to access the files in production environments.
By using the Vite Manifest service, you can access the manifest in your application by injecting the IViteManifest
interface. See the following example.
@inject IViteManifest Manifest
<environment include="Development">
<script type="module" src="~/@@vite/client"></script>
<script type="module" src="~/main.ts"></script>
</environment>
<environment include="Production">
<script type="module" src="~/@Manifest["main.ts"]!.File" asp-append-version="true"></script>
</environment>
You can also inject the manifest service in your controllers or services. See the following example.
public class HomeController : Controller
{
private readonly IViteManifest _manifest;
public HomeController(IViteManifest manifest)
{
_manifest = manifest;
}
public IActionResult Index()
{
var mainFile = _manifest["main.ts"]?.File;
return View();
}
}
Tag Helpers
Do you want to render your entrypoint scripts and styles in the simplest way possible? You can use the special tag helpers provided by this library. First, add the following line to your _ViewImports.cshtml
file.
@addTagHelper *, Vite.AspNetCore
Now you can use the vite-src
and vite-href
attributes in your scripts and links. See the following example.
<link rel="stylesheet" vite-href="~/main.ts" />
<script type="module" vite-src="~/main.ts" asp-append-version="true"></script>
<script type="module" vite-src="~/secondary.ts"></script>
This tag helpers will do the following magic:
- Middleware is enabled:
- If the link tag is a script (you want to include css from a script entrypoint), the link tag will just disappear. This is because Vite loads the styles automatically by including the script.
- If the script of the vite client is not included, it will be added automatically.
- Middleware is disabled:
- The link and script tags will be rendered using the original paths taken from the manifest. The value of the
vite-href
andvite-src
attributes will be used as the entrypoint to access the manifest.
- The link and script tags will be rendered using the original paths taken from the manifest. The value of the
The rendered HTML when the middleware is enabled will look like this.
<script type="module" src="/@vite/client"></script>
<script type="module" src="/main.ts"></script>
<script type="module" src="/secondary.ts"></script>
And the rendered HTML when the middleware is disabled will look like this.
<link rel="stylesheet" href="/css/main.css" />
<script type="module" src="/js/main.js?v=bosLkDB4bJV3qdsFksYZdubiZvMYj_vuJXBs3vz-nc0"></script>
<script type="module" src="/js/secondary.js"></script>
Note: The final paths and filenames depend on how you set it in your
vite.config.ts
file.
Configuration
The middleware and the manifest service can be configured by using environment variables, user secrets or appsettings.json
.
I suggest using appsettings.json
and/or appsettings.Development.json
files. This way, you can share the configuration with other developers. This information is not sensitive, so it's safe to share it.
By default, the manifest name is manifest.json
and it's expected to be in the web root folder. If your manifest file has a different name, you can change it by setting the Vite:Manifest
property.
// appsettings.json
{
"Vite": {
"Manifest": "my-manifest.json"
}
}
You can change the configuration for the middleware by overriding the following properties. ⚙️
Property | Description |
---|---|
Vite:PackageManager |
The name of the package manager to use. Default value is npm . |
Vite:Server:AutoRun |
Enable or disable the automatic start of the Vite Dev Server. Default value is false . |
Vite:Server:KillPort |
Use with Vite:Server:AutoRun to kill the port before starting the Vite Development Server. Default value is false . |
Vite:Server:TimeOut |
The timeout in seconds spent waiting for the vite dev server. Default is 5 |
Vite:Server:Port |
The port where the Vite Development Server will be running. Default value is 5173 . |
Vite:Server:UseHttps |
If true, the middleware will use HTTPS to connect to the Vite Development Server. Default value is false . |
Vite:Server:ScriptName |
The script name to run the Vite Development Server. Default value is dev . |
See the following example.
// appsettings.Development.json
{
"Vite": {
"Server": {
// Enable the automatic start of the Vite Development Server. The default value is false.
"AutoRun": true,
// The port where the Vite Development Server will be running. The default value is 5173.
"Port": 5174,
// If true, the middleware will use HTTPS to connect to the Vite Development Server. The default value is false.
"UseHttps": false,
}
}
}
Examples
Do you want to see how to use this library in a real project? Take a look at these examples
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- Vite.AspNetCore.Abstractions (>= 1.0.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Vite.AspNetCore:
Package | Downloads |
---|---|
AbanoubNassem.Trinity
Trinity is a powerful Single-Page Application (SPA) administration tool that is designed to streamline common administrative tasks and enhance the productivity of developers. With its feature-rich and beautifully-designed interface, built using C# and ASP.NET, Trinity makes it easy to manage your website's backend with ease. |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on Vite.AspNetCore:
Repository | Stars |
---|---|
spark-dotnet/framework
Build production ready, full-stack web applications fast without sweating the small stuff.
|
Version | Downloads | Last updated |
---|---|---|
2.3.0 | 3,654 | 11/11/2024 |
2.1.2 | 21,622 | 8/25/2024 |
2.1.1 | 23,139 | 6/26/2024 |
2.0.1 | 1,256 | 6/8/2024 |
2.0.0 | 27,341 | 4/14/2024 |
1.12.0 | 45,745 | 1/15/2024 |
1.11.0 | 21,569 | 11/25/2023 |
1.10.2 | 7,584 | 10/29/2023 |
1.10.1 | 17,686 | 10/9/2023 |
1.10.0 | 12,460 | 9/16/2023 |
1.9.3 | 9,719 | 8/13/2023 |
1.9.0 | 452 | 7/29/2023 |
1.8.1 | 246 | 7/29/2023 |
1.8.0 | 1,665 | 7/9/2023 |
1.7.1 | 3,996 | 6/25/2023 |
1.7.0 | 1,863 | 6/11/2023 |
1.6.2 | 1,581 | 5/25/2023 |
1.6.1 | 163 | 5/22/2023 |
1.6.0 | 162 | 5/20/2023 |
1.5.3 | 1,027 | 5/2/2023 |
1.5.2 | 202 | 4/28/2023 |
1.5.1 | 282 | 4/22/2023 |
1.5.0 | 544 | 4/16/2023 |
1.4.1 | 221 | 4/12/2023 |
1.4.0 | 4,524 | 3/19/2023 |
1.3.0 | 272 | 2/18/2023 |
1.2.0 | 300 | 1/29/2023 |
1.1.0 | 312 | 1/24/2023 |
1.0.0 | 680 | 1/16/2023 |
The middleware now has the option to kill the port before starting a new instance of the vite development server.
All the options are optional