Elekid
Electron Server Side Render
tl;dr: Promises to return all rendered components, regardless of whether it is ES2015 (es6), ES2016 or ES2017. Elekid works only with React (Soon: Inferno and Vuejs). Do you want add more support options? Send us a PR :)
How it works?
- Read and transpile main component filepath, generating a node module
- Every require in this node module is replaced by smart require (which transpile the source in runtime before nodejs parse start)
- Parse'n deliver this module and repeat this it for every import/require missing.
- Create a dynamic HTML file based on render result
- When nodejs dispatch
exit
,SIGINT
oruncaughtException
event: delete_.html
Configs
-
path: path to get root component (required)
-
template: Wrapper fn to render App. Default:
(app) => app
-
resolve: By default elekid returns filepath, however you can get only the rendered app string using
app
as paramater
Electron Usage
main.js
const elekid = const template = { let mainWindow = config mainWindow mainWindow mainWindow}
template.js
module { return `<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>My Template</title> <link rel="stylesheet" href="style.css"> </head> <body> <div id="root"></div> <script async src="bundle.js"></script> </body> </html>`
Can I use it for develop beyond Electron apps?
I strongly recommend: NO.
Why? Elekid reads any code and parse/transpile it in runtime. It cost a lot, just imagine for every process, you will read/parse/transpile/tokenize/write.
Render it only
greeting.js
Component { return <h1>Hello thispropsname</h1> }
getting it
const elekid = console
output
<h1 data-reactroot="" data-reactid="1" data-react-checksum="1601575969"><!-- react-text: 2 -->Hello, <!-- /react-text --></h1>
Process and get reactElement
const elekid = console/*{ '$$typeof': Symbol(react.element), type: [Function: Dialog], key: null, ref: null, props: {}, _owner: null, _store: {} }*/
Roadmap
- Vuejs Support
- Inferno Support
- Add option to set filename and filepath
- Add option to return only rendered string
Who's using:
If you're using, let me know :)