prepacked

July 25, 2017 ยท View on GitHub

js-standard-style

Use the power of webpack to effectively build in development and then ship for production with minimal setup.

What you do:

๐Ÿ‘Œ๐Ÿผ ๏ธship production level react apps

๐ŸŽ‰ enjoy 1st class development experience

๐Ÿ˜˜ use latest web technologies

๐Ÿ˜ฑ avoid the hassle and intimidation inherent with modern day project configuration

What prepacked does:

๐Ÿ‘‹ assumes you may be new to this javascript app building business

๐Ÿ—ฟ holds an opinion. favors convention over configuration

โœจ avoids magic. requires explicit command instead of making implicit assumptions

Quick Look

webpack.config.js:
// looks to see if you've told the node "environmnet" to be in production
var isDev = process.env.NODE_ENV !== 'production'
var makeConfig = require('prepacked')

module.exports = makeConfig({
  isDev: isDev,
  src: './src',
  out: './public'
})
package.json:

{
  "scripts": {
    "start": "prepacked-dev-server",
    "build": "cross-env NODE_ENV=production prepacked-build-script"
  },
  "devDependencies": {
    "cross-env": "1.0.7",
    "prepacked": "1.4.0"
  }
}
Development

Running npm start in your terminal will allow you to:

  • write your javascript using es6 and jsx
  • style your app using CSS Modules & cssnext
  • view app at localhost:8080. changes automatically update on every save.

Hot Module Replacement

In order for Hot Module Replacement to work, you'll need the following at your app's entry:

if (module.hot) {
  module.hot.accept()
}

This code will be stripped out of production thanks to dead code elimination because module.hot will be false in production.

Production

Running npm run build in your terminal will spit out minified, bundled, sourcemapped js and css goodness for you to ship a la:

public
โ”œโ”€โ”€ app.js
โ”œโ”€โ”€ app.js.gz
โ”œโ”€โ”€ app.js.map
โ”œโ”€โ”€ index.html
โ”œโ”€โ”€ style.css
โ”œโ”€โ”€ style.css.gz
โ””โ”€โ”€ style.css.map

To Document:

  • how prepacked generates html & how to customize it
  • adding feature flags like DEV && PROD
  • adding entry point for styles
  • resolves
  • devServer configuration / adding host for hot reloading over the network

spec: feature flags (DEV) compression tree shaking resolves es6 (spread) features extract stylesheet for prod hot reloading css next local dev server