npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

prerender-react-app

v1.0.13

Published

You created an amazing web app with `create-react-app`, but now want to serve html on initial page load? We got you covered. With this package, you can easily prerender the pages of your desire.

Downloads

7

Readme

Prerender React App

You created an amazing web app with create-react-app, but now want to serve html on initial page load? We got you covered. With this package, you can easily prerender the pages of your desire.

How it works

  • We will serve the production version (build output) of your project
  • A Chromium-based browser (puppeteer) will open all requested pages
  • When the page has all the required content, the browser will return the HTML from the rendered page
  • The rendered page will be stored under the build output, keeping in mind the routing of the project

How to use

Installation

Either

npm i --save-dev prerender-react-app

Or

yarn add -D prerender-react-app

Usage

The example below will prerender three pages:

  • index
  • about
  • policy
const prerender = require("prerender-react-app");

(async () => {
  await prerender({
    pages: ["/", "/about", "/policy"],
    waitForSelector: "footer",
  });
})();

Configuration

| Config name | Description | Default | | --------------- | ---------------------------------------------------------------------- | ------- | | buildPath | Path to the build folder of your project | ./build | | domain | Production domain name of your website | | | port | Port to run web service on while prerendering | 8000 | | pages | Array of routes to prerender | ['/'] | | plugins |  Array of plugins | [] | | waitForSelector |  Wait for a certain selector to be present before completing prerender | |

Plugins

Create your own plugin

A plugin is basically an object with the following methods:

  • before
  • after

The before method will be triggered before the page is rendered. Here you can make adjustments to the page that will be permanently changed onto the output file.

The after method will be triggered after the output page is already created. This can be used to create new custom pages, add tracking, upload results etc etc

All methods will receive the same params:

| Param | description | | ------- | ----------------------------------------------------- | | page | Puppeteer page object to control the Chromium browser | | pageUrl | Route of which page is showing | | config |  Config that was passed to the main prerender method |

const plugin = {
  before: async (page, pageUrl, config) => {
    // Mutate the document a bit
    await page.evaluate(() => {
      document.querySelector("footer").innerHTML += "Prerendering is awesome!";
    });
  },
  after: async (page, pageUrl, config) => {
    // Get the html of the page
    const html = await page.evaluate(
      () => document.body.parentElement?.outerHTML
    );
  },
};

Experimental plugin: AMP

The experimental AMP plugin will autogenerate an AMP version of each page and add the necessary link tags to link both versions to each other.

It will inline all external CSS, as this is a requirement for AMP.

This plugin is experimental and assumes that all pages in your project can work without JavaScript.

import { __experimental } from "prerender-react-app/plugins";

const { amp: ampPlugin } = __experimental;

(async () => {
  await prerender({
    domain: 'dejakob.com',
    plugins: [ampPlugin],
    pages: ['/', '/about'],
    waitForSelector: 'footer'
  } as any);
})();