web-infra-dev / rsbuild

The Rspack-based build tool. It's fast, out-of-the-box and extensible.
https://rsbuild.dev/
MIT License
1.56k stars 120 forks source link

Redesign the dev server, decouple with Modern.js server #3

Closed chenjiahan closed 11 months ago

chenjiahan commented 1 year ago

Rsbuild should avoid depending on Modern.js packages, so we need to design a new dev server for Rsbuild, and allow Modern.js to replace the builtin dev server.

9aoy commented 11 months ago

The goal of Rsbuild Server is to be lightweight, simple, and easy to expand:

Detail Design

Rsbuild Server uses a minimalist combination of http + connect , with all built-in/extended logic added via middleware.

var connect = require('connect');
var http = require('http');

var app = connect();

app.use(function (req, res, next) {
  // req is the Node.js http request object
  // res is the Node.js http response object
  // next is a function to call to invoke the next middleware
})

//create node.js http server and listen on port
http.createServer(app).listen(3000);

devServers comparison:

Rsbuild DevServer Modern.js DevServer (old) webpack-dev-server
Middleware mode connect modern.js custom express
Relationship with prodServer Shared Middleware DevServer inherits prodServer No prodServer
depends on route.json ✔️ (depends on route.json and routing Middleware)
support custom middlewares ✔️ ✔️ ✔️
support custom plugins ✔️
support static directories ✔️ ✔️
ssr support ✔️
proxy support ✔️ ✔️ ✔️

Breaking changes

Compared to modern.js builder, breaking changes include: