Egg React Server Side Render (SSR) Plugin
MIT License
React server side render solution for egg
$ npm i egg-view-react-ssr --save
// {app_root}/config/plugin.js
exports.reactssr = {
enable: true,
package: 'egg-view-react-ssr',
};
reactssr.layout
default app/view/layout.html
reactssr.layout
default app/view/layout.js
egg-view-react-ssr depends on egg-view-react plugin
// {app_root}/config/config.default.js
exports.reactssr = {
// doctype: '<!doctype html>',
// layout: path.join(app.baseDir, 'app/view/layout.html'),
// manifest: path.join(app.baseDir, 'config/manifest.json'),
// injectHeadRegex: /(<\/head>)/i,
// injectBodyRegex: /(<\/body>)/i,
// injectCss: true,
// injectJs: true,
// crossorigin: false,
// injectRes: [],
// mergeLocals: true,
// fallbackToClient: true, // fallback to client rendering if server render failed
// afterRender: (html, context) => { /* eslint no-unused-vars:off */
// return html;
// },
};
see config/config.default.js for more detail.
render
when server render bundle error, will try client render**
// controller/home.js
module.exports = app => {
return class IndecController extends app.Controller {
async index(ctx) {
// home.js: webpack builded ssr entry jsbundle file
await ctx.render('home.js', { message: 'egg react server side render'});
}
};
};
renderClient
, Use React render layoutwhen client render, render layout
exports.reactssr.layout
by React
// controller/home.js
module.exports = app => {
return class IndecController extends app.Controller {
async index(ctx) {
// home.js: webpack builded client render entry jsbundle file
await ctx.renderClient('home.js', { message: 'egg react client side render'});
}
};
};
renderAsset
, Use render layout by viewEngine, default nunjucks
exports.reactssr.layout
by viewEngine, default use egg-view-nunjucks
egg-view-nunjucks
or egg-view-ejs
asset
object that can get js
, css
, state
information. layout template
// controller/home.js
module.exports = app => {
return class IndecController extends app.Controller {
async index(ctx) {
// home.js: webpack builded client render entry jsbundle file
await ctx.renderAsset('home.js', { message: 'egg react client asset render'});
}
};
};
// controller/home.js
module.exports = app => {
return class IndecController extends app.Controller {
async index(ctx) {
// home.js: webpack builded client render entry jsbundle file
await ctx.renderAsset('home.js', { message: 'egg react client asset render'}, { viewEngine: 'ejs' });
}
};
};
React Server Side Render egg-react-webpack-boilerplate
React TypeScript Server Side Render egg-react-typescript-boilerplate
React SSR Framework Example for Egg res-awesome
Please open an issue here.