Coder Social home page Coder Social logo

egg-view-react-loadable's Introduction

egg-view-react-loadable

NPM version Continuous Integration Test coverage Known Vulnerabilities npm download

React loadable SSR view plugin for egg

Features

  • Code splitting
  • Server Side Rendering
  • Full dynamic import

see https://loadable-components.com/ for more detail.

Example

egg-react-ssr-app-example

Install

$ npm i egg-view-react-loadable --save
$ npm i egg-view-nunjucks --save

Usage

// {app_root}/config/plugin.js
exports.nunjucks = {
  enable: true,
  package: 'egg-view-nunjucks',
};

exports.reactLoadable = {
  enable: true,
  package: 'egg-view-react-loadable',
};

Configuration

// {app_root}/config/config.default.js
exports.view = {
  root: [
    path.join(app.baseDir, 'app/view'),
    path.join(app.baseDir, 'app/public/ssr'),
  ].join(','),
  mapping: {
    '.html': 'nunjucks',
    '.js': 'reactLoadable',
  },
};

exports.reactLoadable = {
  nodeStatsFile: path.join(app.baseDir, 'app/public/ssr/loadable-stats.json'),
  webStatsFile: path.join(app.baseDir, 'app/public/csr/loadable-stats.json'),
  template: {
    // template config for `ctx.renderSSR`
    renderSSR: {
      renderSSRTemplate: path.join(app.baseDir, 'app/view/renderSSRLayout.html'),
      viewEngine: 'nunjucks',
    },
    
    // template config for `ctx.renderToStream`
    renderToStream: {
      renderToStreamStartTemplate: path.join(app.baseDir, 'app/view/renderToStreamStartTemplate.html'),
      renderToStreamEndTemplate: path.join(app.baseDir, 'app/view/renderToStreamEndTemplate.html'),
      viewEngine: 'nunjucks',
    },
  },
};

see config/config.default.js for more detail.

Template

template for ctx.renderSSR

<!--  {app_root}/app/view/renderSSRLayout.html -->
<!doctype html>
<head>
    <meta charSet="utf-8"/>
    <meta name="viewport"
          content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"/>
    <title>{{title}}</title>
    ${styleTags}
</head>
<body>
    <div id="app">${content}</div>
    ${initStateContent}
    ${scriptTags}
</body>
</html>

template for ctx.renderToStream

<!--  {app_root}/app/view/renderToStreamStartTemplate.html -->
<!doctype html>
<head>
  <meta charSet="utf-8"/>
  <meta name="viewport"
        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"/>
  <title>{{title}}</title>
</head>
<body>
<div id="app">
<!--  {app_root}/app/view/renderToStreamEndTemplate.html -->
  </div>
  ${initStateContent}
  ${scriptTags}
</body>
</html>

Render

ctx.renderSSR

// controller/home.js
module.exports = app => {
  return class HomeController extends app.Controller {
    async index() {
      const { ctx } = this;
      const { url, path } = ctx;

      await ctx.renderSSR({
        url,
        path,
      });
    }
  };
};

ctx.renderToStream

// controller/home.js
module.exports = app => {
  return class HomeController extends app.Controller {
    async index() {
      const { ctx } = this;
      const { url, path } = ctx;

      await ctx.renderToStream({
        url,
        path,
      });
    }
  };
};

Questions & Suggestions

Please open an issue here.

License

MIT

egg-view-react-loadable's People

Contributors

bingdian avatar

Watchers

 avatar

Forkers

produmpling

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.