hot_reload library
Opt-in hot reload for a Dart CLI nitro_server. Separate from the core
library so nitro_server itself stays dependency-free: this file imports
package:hotreloader, which you add to your own dev_dependencies.
import 'package:nitro_server/nitro_server.dart';
import 'package:nitro_server/hot_reload.dart';
Future<void> setup(NitroServer server) async {
await server.get('/hello', (_) => ResponseContext.text('hi'));
}
void main() async {
final server = await NitroServer.bind(const ServerConfig(port: 8080), setup);
await enableHotReload(server); // re-runs `setup` after every hot reload
print('listening on ${server.uri}');
}
Run with the VM service on so hot reload can attach, then edit a handler and save:
dart run --enable-vm-service bin/server.dart
Every reload re-runs setup on the live socket via NitroServer.reload:
added, removed and changed routes all take effect without dropping the port
or open connections. Works across isolates.
setup must be a top-level or static function (as above), not an inline
closure passed to NitroServer.bind — Dart hot reload does not re-patch a
stored anonymous closure, so a bind(config, (s) async { ... }) would keep
serving the old routes. (A top-level setup is already required for
isolates > 1.) Handlers written inline inside that top-level setup are
fine.
Functions
-
enableHotReload(
NitroServer server, {Iterable< String> ? watch, void log(String message)?}) → Future<HotReloader> -
Wires
server's route NitroServer.reload to every VM hot reload. Returns theHotReloader; call.stop()to detach. A failingsetupis printed to stderr rather than killing the reload loop.