A
highlycustomizable React framework for painless SPAs.
yarn add jepa react react-dom
# or
npm install --save jepa react react-dom
You can optionally replace the following files:
-
src/server/index.js
: The server entrypoint. -
src/server/renderServerWrapper.js
: A function that takes aReact.Component
and return an object of shape:{ renderedRoot: React.Component, // HTML string that will be placed after other styles in the head. style: String, // HTML string that will be placed before other scripts in the end // of the body, useful for providing SSRed stores, for example // Redux or Apollo stores. script: String }
-
src/client/renderClientWrapper.js
: A function that takes aReact.Component
and returns a React component. -
src/universal/Root.js
: The root of the universal app.
name
(String): The name of the project.host
(String): Defaults to0.0.0.0
.port
(Number): Defaults to3000
.clientDevServerPort
(Number): Defaults to3001
.basePath
(String): The base URL the app will be mounted at. Useful when your app is served behind a proxy. Defaults to/
.getRouter
(AsyncFunction): An async function that returns anexpress
router.compress
(Boolean|Object): Set this totrue
or object withcompression
options to enable HTTP compression. Defaults to!__DEV__
.favicon
robotsTxt
(String)manifestJson
(Object)
TODO:
staticDir
(String)bodyParser
(Boolean|Object)logger
forceSsl
sslPort
securityTxt
(String): (https://securitytxt.org/)
Environmental variables can be used to override options that were set in
jepa.options.js
during startup time. You can place a .env
file in
src/
folder.
The following variables are currently supported:
process.env.HOST
process.env.PORT
webpackModify
(AsyncFunction): A function that takes an object argument of shape{webpackConfig, target: 'web' || 'node', env: 'dev' || 'prod'}
, and should return a webpack config object.postcss
(Object):postcss-loader
options.
By default both client and server are bundled with Webpack, which means
there is no use of node_modules
during runtime. Most of the time this
works perfectly fine however there are cases when certain dependencies
can't be bundled (usually these are native dependencies).
You can create a package.json
file and optionally package-lock.json
or yarn.lock
files and specify dependencies there that shouldn't be
bundled with Webpack and installed to node_modules
.