Skip to content

Starter kit for building single-page app using React, Redux, RxJS, Reselect, Material UI, Immer, Prettier and Webpack.

License

Notifications You must be signed in to change notification settings

choonchernlim/front-end-stack

Repository files navigation

front-end-stack

Starter kit for building single-page app using modern front-end stack.

Getting Started

  • Install the following tools:-

    • Node.js.
    • Yarn because it is still much faster than NPM v5.
  • In Chrome, install the following dev tool extensions:-

  • If you are using JetBrains products (ex: IntelliJ IDEA, WebStorm):-

    • Install and configure File Watcher to format code on save using Prettier.
    • Enable "ESLint" in your IDE, which will pick up .eslintrc from the project and enforce it.
  • Clone or download/unzip this project template.

  • Run yarn to install dependencies.

  • To start app development, run yarn start.

    • This command will:-
      • Start Webpack Dev Server.
      • Open default browser.
      • Open https://localhost:8080.
    • When you modify the source code, the configured Hot Module Replacement will automatically refresh the browser content.
    • Since HTTPS is used, Chrome will prompt warning regarding untrusted security certificate. To disable this check:-
      • In Chrome, go to chrome://flags/#allow-insecure-localhost.
      • Click "Enable".
      • Click "Relaunch Now".
  • To package for production, run yarn build.

    • This script will clean the distribution directory and create minified bundle files.
  • To package for production with a different context root than the one defined in package.json, run CONTEXT_ROOT=/new-context-root yarn build.

  • To configure as Jenkins job, run yarn ci.

    • This script will create test result and code coverage files.

Commands

These commands are cross-platform compatible.

Command Description
yarn test Format code, static type check, lint src/test files and run entire tests
yarn test <./path> Format code, static type check, lint src/test files and run only tests within <./path>
yarn test:watch Watch for changes in all test files and rerun yarn test
yarn test:watch <./path> Watch for changes in selected test files and rerun yarn test <./path>
yarn build Build production bundle (compressed cache busting asset files)
yarn ci Remove report dir, format code, static type check, lint src/test files, run tests, run code coverage and generate result files for CI
yarn reinstall Remove node_module and install modules listed in package.json
yarn start Start Node.js Express server with Hot Module Replacement
yarn stats Create stats.json that be loaded to http://webpack.github.io/analyse/ to visualize build
yarn flow Run Flow static type check
yarn flow:restart Restart Flow server before running static type check
yarn prettier Format code

Dependencies

Dependency Description
@material-ui/core UI - Google's material design UI components built with React
@material-ui/icons UI - Google Material icons
@material-ui/styles UI - Style hooks
classnames UI - Conditionally joining classNames together
connected-react-router React - Router with Redux integration
date-fns Parse, validate, manipulate and display dates
history Managing browser history
immer Handling immutable objects
prop-types React - Runtime type checking for React props
react React - Core
react-dom React - DOM
react-redux React - Redux integration
react-router-dom React - Router
recompose React - Useful utility function components and HOCs.
redux Redux - Core
redux-observable Redux - Side Effects middleware using RxJS' Observables
reselect Memoized selector for React components
rxjs Handling async actions
typeface-roboto UI - Roboto font, adhering to Google Material Design spec

Dev Dependencies

Dependency Description
@babel/cli Babel - CLI commands
@babel/core Babel - Core compiler
@babel/plugin-proposal-class-properties Babel - https://babeljs.io/docs/en/babel-plugin-proposal-class-properties
@babel/plugin-proposal-export-default-from Babel - https://babeljs.io/docs/en/babel-plugin-proposal-export-default-from
@babel/polyfill Babel - Emulate a full ES2015+ environment
@babel/preset-env Babel - To use latest JavaScript
@babel/preset-flow Babel - Flow preset
@babel/preset-react Babel - React preset
@babel/register Babel - Provide require hook
autoprefixer Webpack - Add vendor prefixes in CSS
babel-eslint Babel - For linting ES7 syntax... ex: static properties
babel-loader Babel - Loader for transpiling
babel-plugin-istanbul Babel - Istanbul instrumentation to ES6 code. Used in conjunction with nyc.
chai Test - Expect lib
chai-as-promised Test - Fluent approach to test promises
clean-webpack-plugin Webpack - Clean output dir between builds
compression-webpack-plugin Webpack - Generate GZip asset files
css-loader Webpack - CSS loader
enzyme Test - Testing utilities for React
enzyme-adapter-react-16 Test - Enzyme adapter that targets React 16
eslint ESLint - For enforcing coding style
eslint-config-airbnb ESLint - Using Airbnb's coding style
eslint-config-prettier Prettier - Turns off unnecessary ESLint rules or might conflict with Prettier
eslint-loader Webpack - ESLint loader
eslint-plugin-flowtype ESLint - Flow type linting
eslint-plugin-import ESLint - Linting of ES2015+ (ES6+) import/export syntax
eslint-plugin-jsx-a11y ESLint - Static AST checker for accessibility rules on JSX elements
eslint-plugin-prettier ESLint - Runs Prettier as an ESLint rule
eslint-plugin-react ESLint - React specific linting rules
file-loader Webpack - File loader
flow-bin Flow - Static type checker for JavaScript
html-webpack-plugin Webpack - Generates index.html using hash filenames for cache busting
husky Git - Provides Git hooks to run Prettier
image-webpack-loader Webpack - Image loader and handling compression
jsdom Test - A JavaScript implementation of the WHATWG DOM and HTML standards
lint-staged Git - Run Prettier on staged files
mini-css-extract-plugin Webpack - Extract CSS into separate files
mocha Test - JS test framework
mocha-junit-reporter Test - Creating JUnit result file for Jenkins
nock Test - HTTP mocking and expectations library
nodemon Test - Monitor test files and rerun tests. Needed due to cross-platform test runner because mocha --watch doesn't produce run results when executed from require('child_process').exec
nyc Test - Istanbul CLI for code coverage
postcss-loader Webpack - Post CSS loader to run autoprefixer
prettier Prettier - Opinionated code formatter
react-test-renderer Test - Works in conjunction with Enzyme
rimraf Util - rm -rf for both Unix and Windows world
sinon Test - Standalone test spies, stubs and mocks
url-loader Webpack - URL loader
webpack Webpack - Core
webpack-cli Webpack - CLI
webpack-dev-server Webpack - Node.js Express server

Project Structure

. ├── dist -> Distribution dir - Production bundle, including index.html │   └── ... ├── node_modules -> Installed modules dir │   └── ... ├── reports -> Reports dir - Generated reports for Jenkins │   └── ... ├── scripts -> Scripts dir - Cross-platform NPM scripts │   └── ... ├── src -> Dir for actual source files and test files │   └── ... ├── .babelrc -> Babel configuration ├── .editorconfig -> Coding style for different editors ├── .eslintignore -> ESLint ignore list ├── .eslintrc -> ESLint configuration ├── .flowconfig -> Flow configuration ├── .gitattributes -> Custom Git configuration ├── .gitignore -> Git ignore list ├── .huskyrc -> Husky configuration ├── .lintstagedrc -> Lint staged configuration ├── .nycrc -> Istanbul CLI configuration ├── .prettierignore -> Prettier ignore list ├── .prettierrc -> Prettier configuration ├── CHANGELOG.md -> Change logs ├── LICENSE.md -> License, if needed ├── package.json -> NPM scripts and dependencies ├── postcss.config.js -> To fix "No PostCSS Config found" error ├── README.md -> Readme file for the app ├── stats.json -> Generated file when running `yarn stats` ├── webpack.base.config.js -> Common Webpack config ├── webpack.config.js -> Production Webpack config ├── webpack.dev.config.js -> Development Webpack config └── yarn.lock -> Dependency versions lock file used by Yarn 

Troubleshooting

Error: dyld: Library not loaded

When running yarn start, you get this error...

Module build failed: Error: dyld: Library not loaded: /usr/local/opt/libpng/lib/libpng16.16.dylib Referenced from: /path/to/front-end-stack/node_modules/mozjpeg/vendor/cjpeg Reason: image not found 

To fix it, run brew install libpng ... see here for more info

About

Starter kit for building single-page app using React, Redux, RxJS, Reselect, Material UI, Immer, Prettier and Webpack.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •