Static-Site Generation
tramvai can generate pages of your application at build time to static HTML files, this feature is usually called Static Site Generation (SSG)
Explanation
tramvai static <appName> command run production build of the application, then starts application server, and make requests to all application routes. All responses are saved to .html files inside dist/static directory.
This feature is suitable for applications where all pages are independent of dynamic server-side data. You can serve generated HTML files without tramvai server by CDN or any static server.
Usage
Development
- Run development build as usual: - tramvai start <appName>
- Open server with exported pages at http://localhost:3000/ 
Production build
- Run SSG command: - tramvai static <appName>
- Deploy HTML pages to your server and static assets to your CDN 
Preview pages
- Run SSG command with - --serveflag:- tramvai static <appName> --serve
- Open server with exported pages at http://localhost:3000/ 
Static Assets
All static resources (js, css files) will be loaded according to the url specified in ASSETS_PREFIX env variable.
If you build HTML pages with static prefix, for example ASSETS_PREFIX=https://your.cdn.com/, this variable injecting in HTML in build time, and you can't change ASSETS_PREFIX in deploy time.
Select pages to build
You can specify the comma separated paths list for static HTML generation with --onlyPages flag:
tramvai static <appName> --onlyPages=/about/,/blog/
Custom page request headers
You can specify HTTP headers for pages requests with --headers flag, for example if you need generate different HTML for devices with mobile User-Agent:
tramvai static <appName> --header "User-Agent: ..."
This can be combined with --folder flag, which allows to generate different HTML files in subfolder and prevent conflicts:
tramvai static <appName> --header "User-Agent: ..." --folder "mobile"
HTML pages will be generated in dist/static/mobile folder.
Limitations
Dynamic pages (routes like /foo/bar/:id) is not supported, tramvai static command only show warnings for this pages. For now you can use only query parameters for this case.
Server-side Application Lifecycle and Navigation Flow will be executed only once at build time. It means than some data will be non-existed, empty or outdated, for example User-Agent will not be parsed.