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.
The documentation for this project can be found at angular-rspack.dev.
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