render.js 881 B

1234567891011121314151617181920212223242526272829
  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. async function render(page, component) {
  12. const data = {
  13. body: ReactDOM.renderToString(component),
  14. };
  15. const file = join(__dirname, '../build', page.file.substr(0, page.file.lastIndexOf('.')) + '.html');
  16. const html = ReactDOM.renderToStaticMarkup(<Html {...data} />);
  17. await fs.mkdir(dirname(file));
  18. await fs.writeFile(file, html);
  19. }
  20. export default async ({ pages }) => {
  21. console.log('render');
  22. const { route } = require('../build/app.node');
  23. for (const page of pages) {
  24. await route(page.path, render.bind(undefined, page));
  25. }
  26. };