The goal of @ng-rsbuild/plugin-angular
and @ng-rspack/build
is to make easy and straightforward to build Angular applications with Rspack and Rsbuild.
Thank you to Brandon Roberts and Analog for their work on building Angular applications with Vite which both inspired this plugin and provided a basis for the compilation implementation.
Currently, the Rsbuild support is more feature complete than the Rspack support.
There exists an Rsbuild plugin that can be used with a rsbuild.config.ts
file to support compiling Angular applications with Rsbuild.
Prerequisites: Angular SSR Application already created with ng new --ssr
.
- Install Rsbuild:
npm install --save-dev @rsbuild/core
- Install this plugin:
npm install --save-dev @ng-rsbuild/plugin-angular
- Create an
rsbuild.config.ts
file at the root of your project with the following:
import { createConfig } from '@ng-rsbuild/plugin-angular';
export default createConfig({
browser: './src/main.ts',
server: './src/main.server.ts',
ssrEntry: './src/server.ts',
});
- Update your
./src/server.ts
file to use thecreateServer
util:
import { createServer } from '@ng-rsbuild/plugin-angular/ssr';
import bootstrap from './main.server';
const server = createServer(bootstrap);
/** Add your custom server logic here
*
* For example, you can add a custom static file server:
*
* server.app.use('/static', express.static(staticFolder));
*
* Or add additional api routes:
*
* server.app.get('/api/hello', (req, res) => {
* res.send('Hello World!');
* });
*
* Or add additional middleware:
*
* server.app.use((req, res, next) => {
* res.send('Hello World!');
* });
*/
server.listen();
- Run the builds:
npx rsbuild build
- Run the server:
node dist/server/server.js
- Run the dev server:
npx rsbuild dev
Prerequisites: Angular CSR Application already created with ng new
.
- Install Rsbuild:
npm install --save-dev @rsbuild/core
- Install this plugin:
npm install --save-dev @ng-rsbuild/plugin-angular
- Create an
rsbuild.config.ts
file at the root of your project with the following:
import { createConfig } from '@ng-rsbuild/plugin-angular';
export default createConfig({
browser: './src/main.ts',
});
- Run the builds:
npx rsbuild build
- Run the dev server:
npx rsbuild dev
Currently, this is still being viewed as a proof-of-concept.
There needs to be a lot more comprehensive testing before this is viable for real applications.
The current objective is to get HMR working correctly.
Right now, the state of it is as follows:
- The global
ng
module is missing, causing warnings when HMR updates are applied. - Only changes to the following cause an HMR update:
- Global Styles
- Inline Templates
- TS portion of Components
- The following need support (non-exhaustive):
- Inline Styles
- Template Files
- Component Style Files
# Create a new nx workspace
npx create-nx-workspace ng-rspack-test
# Choose options:
# - Stack: None
# - Integrated Monorepo
# - CI: Do it later
# - Remote caching: Up to you
# Change into project directory and install the ng-rspack-build package
cd ng-rspack-test
npm install @ng-rspack/nx
# Run the app generator
npx nx g @ng-rspack/nx:app apps/myapp
# Choose stylesheet format and e2e framework
# Serve the app
npx nx serve myapp
# Build the app
npx nx build myapp
# Run the e2e tests
npx nx e2e myapp-e2e