Advertising: I wrote a book about React. There's a German and an English version. Buy one if you like this project and you want to support my work!
English | German |
---|---|
New! You can now use this project as template! Click here to create a new repo on GitHub with this project as template.
This is just another React Starter Project as there are literally hundreds of others out there. The reason I created this one was to have one central repo I can base my own future projects on, which contains most of the packages I usually use, is easily extendable, easy to understand, supports server side rendering, and uses all the configs and settings I made good experiences with in the past.
Another reason I created my own starter project was because I was setting up two new long term projects and I wanted to be able to use Webpack 4 and Babel 7 long before it was stable. None of the bigger and well known starter projects were supporting both by the time I created this starter project. So the idea was born to create my very own. And here we are
A few things might be familiar when you've worked with other starter projects before. I borrowed many ideas (and will continue to do so) from Create React App, React Starter Kit and other great starter projects because my intention was to create an up-to-date starter project for myself based on best practices and not to completely reinvent the wheel in every possible way just for the sake of it.
My goal is to provide a well-tested, regularly maintained, easily configurable and adjustable React Starter Project with support for server side rendering that gives you a good basis to start your own project on. As minimal as possible with as much functionality as necessary.
I use this Starter Project in several real-word projects so it is battle-tested and everytime I fix a bug or add a feature I find useful I will also update this Starter Project. I will also keep the dependencies up-to-date on a regular basis and will also stay updated with all the latest and greatest best practices in the React world and integrate them if possible and useful!
If you have any questions you can always open an issue on Github or reach out to me on Twitter!
This project has out-of-the-box support for the following things:
General Setup
Libs and Dependencies
Since it's only using standard APIs so far it is ready to be used with the new React Suspense feature coming in React 17!
As a general recommendation you should create a fork of this project first or use GitHub's use this template function so you can adjust it to your own needs, add all the dependencies you need and commit everything back into your own repository.
Once you've forked the repository here on Github, clone it, cd
into the directory and run yarn
(or npm install
) on your command line to install all the dependencies. You're ready to go now!
There are npm scripts for all the relevant things. The server will always be started on port 8500 unless otherwise specified in process.env.PORT
. You can use a .env
file to specify env vars. If you want to use them in your client side code, don't forget to add them in config/env.js.
yarn start
Starts the app in development mode: creates a new client and server dev build using webpack, starts the Express server build (for both file serving and server side pre-rendering) and keeps webpack open in watchmode. Updates the app (if possible) on change using HMR.
yarn build
Creates a new build, optimized for production. Does not start a dev server or anything else.
yarn test
Run all tests using jest.
yarn test:update
Update all Jest snapshots (if there are any)
yarn lint:js
Run ESLint for all JavaScript and TypeScript files
yarn lint:css
Run Stylelint for all CSS files
yarn lint
Run lint:js and lint:css in parallel
yarn analyze
Starts webpack-bundle-analyzer
to give you the opportunity to analyze your bundle(s)
yarn depgraph
Creates an image of your dependency graph. Requires GraphVIZ to be in your system's PATH
yarn plop
Run plop to create new React components or Redux reducers via CLI
There are a few environment variables you can set to adjust the setup to your needs
Variable | Default | Description |
---|---|---|
PORT |
8500 |
Port number your application will be served on. |
HOST |
http://localhost |
Host (including protocol!) your application will be served on. This is usually neglectable as most of the time your application will be served via remote proxy (e.g. Nginx) on localhost. Note: this is only for convenience. The server itself will not be bound exclusively to that host. |
DEVSERVER_HOST |
http://localhost |
Optional. Different host for the Webpack Dev Server to be served on. |
Beginning with v1.3.0, a static index.html
is also generated and written to your clientBuild
directory. You are now able to deploy the build/client
directory to a static webhost (such as Netlify or AWS S3) and serve your application from there!
For the generation of the index.html
the server side build gets started right after building, a headless Chrome then visits the site and writes the content of the server side response to your client directory. So you still need the src/server
directory and the server side build but you're now flexible and can decide on your own whether you want to have the full server side experience or only deploy your completely static app somewhere.
Along with this starter kit comes plop
- a great command line tool to keep the structure of your Redux components and Redux reducers consistent. Run yarn plop
(or npm run plop
) to have components and Redux reducers created for you automatically! Just enter a name, answer a few questions and you're ready to go! You can of course adjust everything to your needs. All Plop templates can be found in the config/plop
directory.
I've successfully tested Storybook and it integrates seamlessly and without any issues into this setup. If you want to add Storybook to your project, install Storybook ^4.0.0
and run getstorybook
to have the basic setup created for you. You must then replace all the content in .storybook/webpack.config.js
with the following line:
module.exports = require('../config/webpack.config.js/storybook');
Afterwards you should be able to run yarn storybook
to start the Storybook Dev Server.
If you want your project to stay up to date with recent changes to this project, you can add React SSR Starter as remote to your local git repo. Use the following line:
git remote add upstream git@github.com:manuelbieh/react-ssr-setup.git
More on that can be found on Github: Syncing a fork.
In some cases you might not want to generate source maps for the generated files. In this case you can set the OMIT_SOURCEMAP
environment variable to true
. No source map files will be generated then. This works no matter if you're in devmode or building for production.
By default if you run yarn start
the development server will use port 8500. You can change this by specifying a PORT
environment variable.
You can import SVG files as React components exactly the way you can do it in Create React App 2.0:
import { ReactComponent as Logo } from './Logo.svg';
Then you can use it in JSX like <div><Logo /></div>
.
Here is a video that explains that a bit more.
Express.static
middleware. That's how I usually do it and that's why you won't see any assets when starting the production server build with Node. If you still want to use Express.static
in production despite the warning, have a look at the first few lines of ./src/server/index.js
. There's a short comment with a description what you need to do.ExtractTextWebpackPlugin
with MiniCSSExtractPlugin
once it's working properlyreact-loadable
or
react-universal-component
(or both, still investigating what makes most sense).
Update:
react-loadable
is out due to
questionable license change
react-helmet
optimize-css-assets-webpack-plugin
and postcss-safe-parser
similar to how CRA 2 is doing itsvg-loader
babel-loader
so SVGs can be imported as React component (see CRA 2)Moved to its own file: CHANGELOG.md
MIT.
今天,我们发布了 React 18 RC 版本。正如我们在 React Conf 上分享的那样,React 18 基于 concurrent 模式,带来了更多能力,同时提供了渐进升级的方法。在这篇文章中,我们会一步一步的带您升级到 React 18。 安装 使用 @rc标签来安装最新版 React ## npm $ npm install react@rc react-dom@rc ## yar
前言 目前单页面应用(SPA)很是流行,同时也带了一些问题,如SEO不友好,首屏在网络较差的情况下加载慢。为了解决这些问题仿佛又回到了传统web开发模式上去了,回去是不可能的,已经入坑了是不可能回去的。React作为一个SPA应用开发框架同时也支持服务端渲染,本系列文章将从以下几点介绍如何搭建一个React服务端渲染的项目 项目搭建 前后端路由同构 代码分割和数据预取 如果你倾向于开箱即用的体验,
react 服务器端渲染 介绍 (Introduction) Server-side rendering (SSR) is a popular technique for rendering a client-side single page application (SPA) on the server and then sending a fully rendered page to the
原文地址:medium.freecodecamp.org/demystifyin… Server-Side Rendering :SSR 是一种前端框架能够在后端渲染出HTML的能力。那些能够在客户端和服务端完成渲染的应用就叫做 universal app 为什么需要SSR? 为了理解为什么需要SSR,这里我们需要了解下web应用在过去十年内的发展史。SSR与SPA(Single Page App
react 服务器端渲染 Let’s have a closer look at the feature that allows you to build universal applications with React. 让我们仔细看一下允许您使用React构建通用 应用程序的功能。 Server-Side Rendering — SSR from here on — is the abili
SSR News - React React Server Side Rendering demo project. This project uses News API under the hood. Demo: Click to see DEMO Getting Started This project created for a Meetup talk about Server Side R
React Server-Side Rendering Example Above is an example playground for you to play with React & Redux on Client and Server sides.Before jumping into it, make sure to read SSR tutorial on Freecodecamp
本仓库的 目的 是为 san 提供一个 SSR 代码框架和工具,以及内置了 JavaScript 的代码生成。 English SSR 代码迁移:从 san 到 san-ssr Demo:demo/ 安装 npm i san@latest san-ssr@latest san-ssr 需要 san 提供的模板字符串解析和 TypeScript 类型,因此对 san 的版本有依赖。你需要安装对应版本
A minimum sample of Server-Side-Rendering, Single-Page-Application, and Progressive Web App What's this project? This project introduces how to implement SSR, SPA, and PWA. Articles only Japanese SPA
Nuxt-ssr是一个文章增删改查的SSR项目 Nuxt.js该项目是一个ssr结构完整的项目,适合新人练手使用,如果对您有帮助,请右上角给个star,鼓励一下,同时希望指正。也可以加 nuxt技术交流群,大家一起相互学习,相互成长。 用到的技术 Vue.js v2.0.0 Nuxt.js v1.0.0 Node.js v9.8.0 (必须>=8.0) Express.js v4.x MongoD
使用 在SSR-3目录中 npm install 安装依赖 打包服务端 npm run server:build 打包客户端 npm run client:build 在dist目录index.ssr.html中引入客户端代码<script src="./client.bundle.js"></script> 执行服务端脚本 node server.js webpack5.0尝鲜 SSR+Vue+