roof widgets
Libraries
This project uses the following libraries and tools:
Core
- TypeScript
- React & React DOM for views.
- Router5 to handle in-app routing.
- Redux for managing application state.
- React Redux to use React-Redux bindings.
- React Router5 & Redux-Router5 integrate router5 with react and redux
Utilities
- Redux Saga make side effects (i.e. asynchronous things like data fetching and impure things like accessing the browser cache) in React/Redux applications easier and better.
- TypeStyle make css typesafe
Build System
-
Webpack for bundling.
- Awesome TypeScript Loader as ts loader.
- React Hot Loader for providing hot reload capability to our development server
- File Loader
- URL Loader
- Manifest Plugin
- TS Lint Loader for using tslint as preloader on build process.
Dev & Prod Server
- Webpack Dev Middleware
- Webpack Hot Middleware
- Express for running server both on client and server side.
- Serve Favicon for serving favicon.
Developer Experience
- TS Lint for linting TypeScript files.
- Redux Logger
- Redux DevTools
- Chalk for colored terminal logs.
Testing
- Jest as test runner.
- TS Jest as Jest preprocessor
- Enzyme for rendering React Components.
- Jest Enzyme for asserting React Components.
- Wallaby intelligent test runner for JavaScript that continuously runs your tests.
Directory Structure
.
├── build # Built, ready to serve app.
├── config # Root folder for configurations.
│ ├── types # Global type definitions, written by us.
│ ├── webpack # Webpack configurations.
│ ├── main.js # Generic App configurations.
│ └── main.local.js # Local App configurations.
├── node_modules # Node Packages.
├── src # Source code.
│ ├── app # App folder.
│ │ ├── components # React Components.
│ │ ├── containers # React Containers.
│ │ ├── helpers # Helper Functions & Components.
│ │ ├── images # Images folder.
│ │ ├── redux # Redux related code aka data layer of the app.
│ │ │ ├── modules # Redux modules.
│ │ │ ├── rootReducer.ts # Main reducers file to combine them.
│ │ │ └── configureStore.ts # Redux store, contains global app state.
│ │ ├── routes # Routes.
│ │ └── sagas # Saga files.
│ ├── vendor # Dealing with resources
│ ├── client.tsx # Entry point for client side rendering.
│ ├── favicon.ico # Favicon
│ ├── index.html # html file for client side rendering
│ └── server.tsx # Entry point for server side rendering.
├── translations # For json translations.
├── .dockerignore # Tells docker which files to ignore.
├── .editorconfig # Configuration for editors.
├── .gitignore # Tells git which files to ignore.
├── .travis.yml # Travis file.
├── Dockerfile # Dockerfile.
├── LICENSE # License file
├── package.json # Package configuration.
├── package-lock.json # Package lock
├── README.md # This file
├── tsconfig.json # TypeScript transpiler configuration.
├── tslint.json # Configures tslint.
└── wallaby.conf.js # Configuraton for wallaby testing
Installation
You can clone from this repository and use master
$ git clone https://github.com/crazyfactory/ts-react-boilerplate
$ cd ts-react-boilerplate
$ npm install
Usage
All commands defaults to development environment. You can set NODE_ENV
to production
or use the shortcuts below.
# Running
$ npm start # This starts the app in development mode
# Starting it with the production build
$ NODE_ENV=production npm start # or
$ npm run start:prod
# Building
$ npm build # This builds the app in development mode
# Commands below builds the production build
$ NODE_ENV=production npm build # or
$ npm run build:prod
# Testing
$ npm test
For Windows users, we recommend using the shortcuts instead of setting environment variables because they work a little different on Windows.
Raven
Create main.local.js in config folder and export an object that has sentry
key like so:
module.exports = {
sentry: {
dsn: YOUR_DSN,
release: YOUR_RELEASE_VERSION
}
// other configs
...
}
Credits
This boilerplate is based on Vortigern and is heavily updated. This boilerplate is released under the MIT license.