render.js 945 B

12345678910111213141516171819202122232425262728293031
  1. /**
  2. * React Static Boilerplate
  3. * https://github.com/koistya/react-static-boilerplate
  4. * Copyright (c) Konstantin Tarkus (@koistya) | MIT license
  5. */
  6. import { join, dirname } from 'path';
  7. import React from 'react';
  8. import ReactDOM from 'react-dom/server';
  9. import Html from '../components/Html';
  10. import fs from './lib/fs';
  11. const DEBUG = !process.argv.includes('release');
  12. async function render(page, component) {
  13. const data = {
  14. body: ReactDOM.renderToString(component),
  15. };
  16. const file = join(__dirname, '../build', page.file.substr(0, page.file.lastIndexOf('.')) + '.html');
  17. const html = ReactDOM.renderToStaticMarkup(<Html debug={DEBUG} {...data} />);
  18. await fs.mkdir(dirname(file));
  19. await fs.writeFile(file, html);
  20. }
  21. export default async ({ pages }) => {
  22. console.log('render');
  23. const { route } = require('../build/app.node');
  24. for (const page of pages) {
  25. await route(page.path, render.bind(undefined, page));
  26. }
  27. };