kununu-electrode-react-webapp

Hapi plugin that provides a default React web app template

Usage no npm install needed!

<script type="module">
  import kununuElectrodeReactWebapp from 'https://cdn.skypack.dev/kununu-electrode-react-webapp';
</script>

README

Electrode React Webapp

NPM version Dependency Status devDependency Status npm downloads

This is a Hapi plugin that register a default route for your Webapp to return a bootstrapping React application. With support for webpack dev server integrations.

Installing

npm install kununu-electrode-react-webapp --save

Usage

Registering with Hapi

You can use this plugin by registering it with your Hapi server.

const reactWebapp = server.register({
  register: require("kununu-electrode-react-webapp"),
  options: {
    pageTitle: "My Awesome React WebApp",
    paths: {
      "/{args*}": {
        view: "index",
        content: "<h1>Hello React!</h1>"
    }
  }
});

Registering with electrode-server

To use this with electrode-server, add to the config you pass to electrode-server:

const config = {
  plugins: {
    "kununu-electrode-react-webapp": {
      options: {
        pageTitle: "My Awesome React WebApp",
        paths: {
          "/{args*}": {
            view: "index",
            content: "<h1>Hello React!</h1>"
        }
      }
    }
  }
}

require("electrode-server")(config);

Default options

This plugin has some default options but you can override them by setting your own value.

The current defaults are:

{
  pageTitle: "Untitled Electrode Web Application",
  webpackDev: process.env.WEBPACK_DEV === "true",
  renderJS: true,
  serverSideRendering: true,
  htmlFile: "node_modules/kununu-electrode-react-webapp/lib/index.html",
  devServer: {
    host: "127.0.0.1",
    port: "2992"
  },
  paths: {},
  stats: "dist/server/stats.json"
}

Options

What you can do with the options:

  • pageTitle (String) The value to be shown in the browser's title bar
  • webpackDev (Boolean) whether to use webpack-dev-server's URLs for retrieving CSS and JS bundles.
  • serverSideRendering (Boolean) Toggle server-side rendering.
  • htmlFile (String) Absolute or relative path to the application root html file. It must contains the following placeholders:
    • {{PAGE_TITLE}} page title.
    • {{WEBAPP_BUNDLES}} injected <script> and <link> tags to load bundled JavaScript and Css
    • {{PREFETCH_BUNDLES}} <script> tag containing code that will contains prefetched JavaScript code
    • {{SSR_CONTENT}} injected content rendered on server side
  • paths (Object) An object of key/value pairs specifying paths within your application with their view and (optionally) initial content for server-side render
    • path (Object)
      • view (String) Name of the view to be used for this path required
      • content Content to be rendered by the server when server-side rendering is used optional see details
  • devServer (Object) Options for webpack's DevServer
    • host (String) The host that webpack-dev-server runs on
    • port (String) The port that webpack-dev-server runs on

Content details

The content you specify for your path can either be a string or a promise returning function.

If it's a string, it's treated as a straight React template to be rendered.

If it's a function, the function should return a promise that resolves an object:

function myContent() {
  return Promise.resolve({
    status: 200,
    html: "<h1>Hello React!</h1>",
    prefetch: ""
  });
}