Top Related Projects
ASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.
Set up a modern web app by running one command.
The React Framework
Cybernetically enhanced web apps
CLI tool for Angular
🛠️ webpack-based tooling for Vue.js Development
Quick Overview
JavaScriptServices is a set of technologies for ASP.NET Core developers to build single-page applications (SPAs) and server-side rendered applications using JavaScript frameworks like Angular, React, and Vue. It provides server-side prerendering, webpack middleware, and other utilities to integrate modern JavaScript development with ASP.NET Core.
Pros
- Seamless integration of modern JavaScript frameworks with ASP.NET Core
- Server-side prerendering for improved performance and SEO
- Hot module replacement for faster development
- Cross-platform support for Windows, macOS, and Linux
Cons
- Learning curve for developers new to both ASP.NET Core and modern JavaScript frameworks
- Potential complexity in debugging server-side rendered applications
- Limited documentation and community support compared to standalone JavaScript frameworks
- Dependency on specific versions of JavaScript frameworks may lead to compatibility issues
Code Examples
- Creating a new SPA with Angular:
dotnet new angular -o MyAngularApp
cd MyAngularApp
dotnet run
- Configuring server-side prerendering in Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddSpaPrerenderer();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
}
- Using the SpaServices TagHelper in a Razor view:
@addTagHelper *, Microsoft.AspNetCore.SpaServices
<app asp-prerender-module="ClientApp/dist/main-server">Loading...</app>
Getting Started
To get started with JavaScriptServices:
- Install the .NET Core SDK (3.1 or later)
- Install Node.js (12.0 or later)
- Create a new SPA project:
dotnet new angular -o MyApp cd MyApp
- Run the application:
dotnet run
This will create a new Angular-based SPA integrated with ASP.NET Core. You can replace angular
with react
or vue
to use other frameworks.
Competitor Comparisons
ASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.
Pros of aspnetcore
- More comprehensive framework covering full ASP.NET Core stack
- Active development with frequent updates and new features
- Larger community and ecosystem support
Cons of aspnetcore
- Steeper learning curve due to broader scope
- Potentially more complex setup for simple JavaScript-focused projects
- Larger footprint and resource requirements
Code Comparison
JavaScriptServices:
services.AddSpaPrerenderer();
services.AddNodeServices();
aspnetcore:
services.AddControllersWithViews();
services.AddRazorPages();
services.AddServerSideBlazor();
Key Differences
- JavaScriptServices focuses on integrating JavaScript frameworks with ASP.NET Core
- aspnetcore provides a full-stack solution for web development with .NET
- JavaScriptServices is now part of aspnetcore, offering more integrated JavaScript support
Use Cases
JavaScriptServices:
- Single-page applications with server-side rendering
- Projects heavily reliant on JavaScript frameworks
aspnetcore:
- Full-stack web applications
- Microservices and APIs
- Server-side rendering with Razor Pages or Blazor
Community and Support
JavaScriptServices:
- Smaller, more specialized community
- Less frequent updates
aspnetcore:
- Large, active community
- Regular updates and extensive documentation
Set up a modern web app by running one command.
Pros of Create React App
- Simpler setup and configuration for React projects
- Extensive documentation and large community support
- Regular updates and maintenance from Facebook
Cons of Create React App
- Less flexibility for customization without ejecting
- Limited to React-based projects only
- Heavier initial bundle size compared to minimal setups
Code Comparison
Create React App:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
JavaScriptServices:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSpaStaticFiles(configuration => {
configuration.RootPath = "ClientApp/build";
});
}
Key Differences
- Create React App focuses solely on React development, while JavaScriptServices supports multiple JavaScript frameworks within ASP.NET Core
- JavaScriptServices provides server-side rendering capabilities out of the box, which Create React App does not
- Create React App offers a more streamlined development experience for pure React applications, while JavaScriptServices integrates better with ASP.NET Core backends
Use Cases
- Choose Create React App for standalone React projects or when working exclusively with React
- Opt for JavaScriptServices when building full-stack applications with ASP.NET Core and need server-side rendering or integration with other JavaScript frameworks
The React Framework
Pros of Next.js
- More active development and larger community support
- Built-in performance optimizations and automatic code splitting
- Seamless integration with Vercel's deployment platform
Cons of Next.js
- Steeper learning curve for developers new to React
- Less flexibility in server-side technology choices (primarily Node.js-based)
Code Comparison
Next.js:
// pages/index.js
export default function Home() {
return <h1>Welcome to Next.js!</h1>
}
JavaScriptServices:
// Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSpa(spa => {
spa.Options.SourcePath = "ClientApp";
});
}
Summary
Next.js offers a more modern and feature-rich approach to building React applications with server-side rendering capabilities. It provides excellent performance optimizations out of the box and has strong community support. However, it may require more initial learning for developers unfamiliar with React ecosystems.
JavaScriptServices, while less actively developed, offers tighter integration with ASP.NET Core and provides more flexibility in choosing server-side technologies. It may be a better fit for teams already working with .NET technologies and looking to incorporate modern JavaScript frameworks into their existing stack.
The choice between the two depends on the specific project requirements, team expertise, and existing technology stack.
Cybernetically enhanced web apps
Pros of Svelte
- Lightweight and efficient, with smaller bundle sizes
- Compile-time framework, resulting in faster runtime performance
- Simple and intuitive syntax, reducing boilerplate code
Cons of Svelte
- Smaller ecosystem and community compared to more established frameworks
- Limited tooling and integration options for server-side rendering
- Potential learning curve for developers used to traditional frameworks
Code Comparison
Svelte component:
<script>
let count = 0;
function increment() {
count += 1;
}
</script>
<button on:click={increment}>
Clicks: {count}
</button>
JavaScriptServices (React component):
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>
Clicks: {count}
</button>
);
}
Summary
Svelte offers a more lightweight and efficient approach to building user interfaces, with a focus on compile-time optimization and reduced boilerplate. JavaScriptServices, being part of the ASP.NET ecosystem, provides better integration with server-side technologies and a more mature toolset. The choice between the two depends on project requirements, team expertise, and the desired balance between performance and ecosystem support.
CLI tool for Angular
Pros of Angular CLI
- More comprehensive tooling for Angular development, including scaffolding, testing, and deployment
- Active development and frequent updates from the Angular team
- Large community and extensive ecosystem of plugins and extensions
Cons of Angular CLI
- Focused solely on Angular, limiting its use for other JavaScript frameworks
- Steeper learning curve for developers new to Angular ecosystem
- Can be opinionated in its project structure and build process
Code Comparison
JavaScriptServices:
services.AddSpaPrerenderer();
services.AddNodeServices();
Angular CLI:
ng new my-app
ng serve
ng generate component my-component
Key Differences
JavaScriptServices is designed to integrate various JavaScript frameworks with ASP.NET Core, while Angular CLI is specifically tailored for Angular development. JavaScriptServices provides server-side rendering and Node.js integration for .NET applications, whereas Angular CLI offers a complete development environment for Angular projects.
JavaScriptServices is more flexible in terms of framework choice but may require more manual configuration. Angular CLI provides a more streamlined experience for Angular developers but is limited to that framework.
Both tools aim to improve the development workflow for modern web applications, but they cater to different ecosystems and have distinct use cases.
🛠️ webpack-based tooling for Vue.js Development
Pros of vue-cli
- Lightweight and focused solely on Vue.js development
- Extensive plugin system for easy customization
- Provides a full-featured GUI for project management
Cons of vue-cli
- Limited to Vue.js projects, unlike JavaScriptServices' broader .NET integration
- Lacks built-in server-side rendering capabilities
- May require additional setup for complex backend integrations
Code Comparison
vue-cli project creation:
vue create my-project
cd my-project
npm run serve
JavaScriptServices with ASP.NET Core:
public void ConfigureServices(IServiceCollection services)
{
services.AddSpaStaticFiles(configuration => {
configuration.RootPath = "ClientApp/dist";
});
}
Summary
vue-cli is a powerful tool for Vue.js development, offering a streamlined experience with extensive customization options. However, it's limited to Vue.js projects and may require additional setup for complex backend integrations. JavaScriptServices, on the other hand, provides broader .NET integration and built-in server-side rendering capabilities, making it more suitable for full-stack development with ASP.NET Core. The choice between the two depends on the specific project requirements and the desired level of integration with the .NET ecosystem.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
JavaScriptServices [Archived]
IMPORTANT
The features described in this article are obsolete as of ASP.NET Core 3.0. A simpler SPA frameworks integration mechanism is available in the Microsoft.AspNetCore.SpaServices.Extensions NuGet package. For more information, see [Announcement] Obsoleting Microsoft.AspNetCore.SpaServices and Microsoft.AspNetCore.NodeServices.
What is this?
JavaScriptServices
is a set of client-side technologies for ASP.NET Core. It provides infrastructure that you'll find useful if you:
- Use Angular / React / Vue / Aurelia / Knockout / etc.
- Build your client-side resources using Webpack.
- Execute JavaScript on the server at runtime.
Read Building Single Page Applications on ASP.NET Core with JavaScriptServices for more details.
This repo contains:
- A set of NuGet/NPM packages that implement functionality for:
- Invoking arbitrary NPM packages at runtime from .NET code (docs)
- Server-side prerendering of SPA components (docs)
- Webpack dev middleware (docs)
- Hot module replacement (HMR) (docs)
- Server-side and client-side routing integration (docs)
- Server-side and client-side validation integration
- "Lazy loading" for Knockout apps
- Samples and docs
It's cross-platform (Windows, Linux, or macOS) and works with .NET Core 2.0 or later.
Creating new applications
Prerequisites:
- .NET Core 2.0 (or later) SDK
- Node.js version 6 (or later)
With these prerequisites, you can immediately create new ASP.NET Core applications that use Angular, React, or React+Redux without having to install anything extra.
Option 1: Creating Angular/React/Redux applications from the command line (cross-platform)
In an empty directory, run (for example) dotnet new angular
. Other supported SPA frameworks include React and React+Redux. You can see the list of available SPA templates by running dotnet new spa
.
Once the generator has run and restored all the dependencies, you can start up your new ASP.NET Core SPA:
npm install
dotnet run
Option 2: Creating Angular/React/Redux applications using Visual Studio 2017 Update 3 or later (Windows only)
Using the File
->New Project
dialog, select ASP.NET Core Web Application. You will then be offered the option to create an application with Angular, React, or React+Redux. When the application is created, you can build and run it in the normal way.
More info and other SPA frameworks
For a more detailed (albeit somewhat outdated) walkthrough, see getting started with the aspnetcore-spa
generator.
If you want to build an ASP.NET Core application with Aurelia, Knockout, or Vue, you can use the Microsoft.AspNetCore.SpaTemplates
package. On the command line, run dotnet new --install Microsoft.AspNetCore.SpaTemplates
. Then you will be able to run dotnet new aurelia
(or dotnet new vue
, etc.) to create your new application.
Adding to existing applications
If you have an existing ASP.NET Core application, or if you just want to use the underlying JavaScriptServices packages directly, you can install these packages using NuGet and NPM:
Microsoft.AspNetCore.NodeServices
- This provides a fast and robust way for .NET code to run JavaScript on the server inside a Node.js environment. You can use this to consume arbitrary functionality from NPM packages at runtime in your ASP.NET Core app.
- Most applications developers don't need to use this directly, but you can do so if you want to implement your own functionality that involves calling Node.js code from .NET at runtime.
- Find documentation and usage examples here.
Microsoft.AspNetCore.SpaServices
- This provides infrastructure that's generally useful when building Single Page Applications (SPAs) with technologies such as Angular or React (for example, server-side prerendering and webpack middleware). Internally, it uses the
NodeServices
package to implement its features. - Find documentation and usage examples here
- This provides infrastructure that's generally useful when building Single Page Applications (SPAs) with technologies such as Angular or React (for example, server-side prerendering and webpack middleware). Internally, it uses the
There were previously other packages called Microsoft.AspNetCore.AngularServices
and Microsoft.AspNetCore.ReactServices
but these are not currently needed - all applicable functionality is in Microsoft.AspNetCore.SpaServices
, because it's sufficiently general.
If you want to build a helper library for some other SPA framework, you can do so by taking a dependency on Microsoft.AspNetCore.SpaServices
and wrapping its functionality in whatever way is most useful for your SPA framework.
Samples
The samples
directory contains examples of:
- Using the JavaScript services family of packages with Angular and React.
- A standalone
NodeServices
usage for runtime code transpilation and image processing.
To run the samples:
- Clone this repo
- At the repo's root directory (the one containing
src
,samples
, etc.), rundotnet restore
- Change directory to the sample you want to run (for example,
cd samples/angular/MusicStore
) - Restore Node dependencies by running
npm install
- If you're trying to run the Angular "Music Store" sample, then also run
gulp
(which you need to have installed globally). None of the other samples require this.
- If you're trying to run the Angular "Music Store" sample, then also run
- Run the application (
dotnet run
) - Browse to http://localhost:5000
Top Related Projects
ASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.
Set up a modern web app by running one command.
The React Framework
Cybernetically enhanced web apps
CLI tool for Angular
🛠️ webpack-based tooling for Vue.js Development
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot