Skip to content

Instantly share code, notes, and snippets.

View faceyspacey's full-sized avatar

James Gillmore faceyspacey

View GitHub Profile
import createHistory from 'history/createMemoryHistory'
import configureStore from '../src/configureStore'
export default async (req, res) => {
const history = createHistory({ initialEntries: [req.path] })
const { store, thunk } = configureStore(history)
await thunk(store) // THE PAYOFF!
const status = store.getState().location.type === NOT_FOUND ? 404 : 200
import React from 'react'
import ReactDOM from 'react-dom/server'
import { Provider } from 'react-redux'
import configureStore from './configureStore'
import App from '../src/components/App'
export default () => async (req, res, next) => {
const store = await configureStore(req, res)
// client
const webpack = require('webpack')
const path = require('path')
module.exports = {
name: 'client',
entry: [
path.resolve(__dirname, '../src/index.js')
],
output: {
const app = express()
const multiCompiler = webpack([clientConfig, serverConfig])
const clientCompiler = multiCompiler.compilers[0]
app.use(webpackDevMiddleware(multiCompiler, { publicPath }))
app.use(webpackHotMiddleware(clientCompiler))
app.use(webpackHotServerMiddleware(multiCompiler)
app.listen(3000, () => console.log('READY'))
@faceyspacey
faceyspacey / server-configureStore.js
Created August 8, 2017 06:39
redux-first router server/configureStore.js (with 1 redirect)
import createHistory from 'history/createMemoryHistory'
import { NOT_FOUND } from 'redux-first-router'
import configureStore from '../src/configureStore'
export default async (req, res) => {
const history = createHistory({ initialEntries: [req.path] })
const { store, thunk } = configureStore(history)
await thunk(store) // THE PAYOFF!
@faceyspacey
faceyspacey / server-configureStore.js
Created August 8, 2017 06:39
redux-first router server/configureStore.js (simple - no promise all, no redirect)
import createHistory from 'history/createMemoryHistory'
import { NOT_FOUND } from 'redux-first-router'
import configureStore from '../src/configureStore'
export default async (req, res) => {
const history = createHistory({ initialEntries: [req.path] })
const { store, thunk } = configureStore(history)
await thunk(store) // THE PAYOFF!
@faceyspacey
faceyspacey / server-configureStore.js
Created August 8, 2017 06:37
redux-first router server/configureStore.js (simple)
import createHistory from 'history/createMemoryHistory'
import { NOT_FOUND } from 'redux-first-router'
import configureStore from '../src/configureStore'
export default async (req, res) => {
const history = createHistory({ initialEntries: [req.path] })
const { store, thunk } = configureStore(history)
// perhaps request + dispatch app-wide state as well:
// await Promise.all([ store.dispatch(myThunkA), store.dispatch(myThunkB) ])
@faceyspacey
faceyspacey / server-configureStore.js
Last active August 8, 2017 06:34
redux-first router server/configureStore.js
import createHistory from 'history/createMemoryHistory'
import { NOT_FOUND } from 'redux-first-router'
import configureStore from '../src/configureStore'
export default async (req, res) => {
const history = createHistory({ initialEntries: [req.path] })
const { store, thunk } = configureStore(history)
let location = store.getState().location
if (doesRedirect(location, res)) return false
@faceyspacey
faceyspacey / universalNodeExternalsStrategy.js
Last active July 31, 2017 07:04
Universal node externals strategy
externals: !isNode ? [] :
fs.readdirSync(path.resolve(__dirname, '../../node_modules'))
.filter(
x => !/\.bin|react-universal-component|webpack-flush-chunks|^normalize.css/.test(x),
)
.reduce((externals, mod) => {
externals[mod] = `commonjs ${mod}`; // eslint-disable-line
return externals;
}, {}),
@faceyspacey
faceyspacey / webpack.requireWeak.js
Created July 28, 2017 07:53
proposal for webpack requireWeak function
const requireWeak = (modulePath) => {
try {
const moduleId = require.resolveWeak(modulePath)
return __webpack_require__(moduleId)
}
catch (err) {
return null
}
}