Skip to content

Commit f217113

Browse files
committed
Adds cache clearing for server modules
1 parent dd6baa2 commit f217113

File tree

3 files changed

+58
-9
lines changed

3 files changed

+58
-9
lines changed

package.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@
1818
"react-router": "^2.7.0",
1919
"react-router-redux": "^4.0.5",
2020
"redux": "^3.6.0",
21-
"redux-immutablejs": "0.0.8"
21+
"redux-immutablejs": "0.0.8",
22+
"colors": "^1.1.2"
2223
},
2324
"devDependencies": {
2425
"babel-polyfill": "^6.13.0",
25-
"babel-register": "^6.14.0",
2626
"babel-preset-es2015": "^6.14.0",
2727
"babel-preset-react": "^6.11.1",
28-
"babel-preset-stage-0": "^6.5.0"
28+
"babel-preset-stage-0": "^6.5.0",
29+
"babel-register": "^6.14.0",
30+
"chokidar": "^1.6.0"
2931
}
3032
}

src/server/server.js

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,70 @@
1+
import http from 'http';
12
import express from 'express';
3+
import colors from 'colors';
4+
5+
// Development Libraries
6+
// import webpack from 'webpack';
7+
// import devWebpackConfig from '/webpack/webpack.config.dev';
8+
import chokidar from 'chokidar';
29

310
import {
411
renderPage,
512
renderDevPage
613
} from './ssr';
714

8-
915
const PROD = process.env.NODE_ENV === 'production';
1016

1117
const app = express();
1218

13-
19+
// Production settings
1420
if (PROD) {
1521
app.get('*', renderPage);
22+
23+
// Development settings
1624
} else if (!PROD) {
25+
// const compiler = webpack(devWebpackConfig);
26+
//
27+
// app.use(require('webpack-dev-middleware')(compiler, {
28+
// noInfo: true,
29+
// publicPath: devWebpackConfig.output.publicPath
30+
// }));
31+
//
32+
// app.use(require('webpack-hot-middleware')(compiler, {
33+
// log: console.log
34+
// }));
35+
1736
app.get('*', renderDevPage);
37+
38+
// Do "hot-reloading" of express stuff on the server
39+
// Throw away cached modules and re-require next time
40+
// Ensure there's no important state in there!
41+
const watcher = chokidar.watch('.', {ignored: /[\/\\]node_modules[\/\\]/});
42+
43+
watcher.on('ready', function() {
44+
watcher.on('all', function() {
45+
Object.keys(require.cache).forEach(function(id) {
46+
if (/[\/\\]server[\/\\]/.test(id)) {
47+
console.log(`${'Clearing'.yellow} ${'/server/'.red+id.split(/[\/\\]server[\/\\]/)[1].red} ${'module cache from server'.yellow}`);
48+
delete require.cache[id];
49+
}
50+
});
51+
});
52+
});
53+
54+
55+
// Do "hot-reloading" of react stuff on the server
56+
// Throw away the cached client modules and let them be re-required next time
57+
// compiler.plugin('done', function() {
58+
// console.log("Clearing /client/ module cache from server");
59+
// Object.keys(require.cache).forEach(function(id) {
60+
// if (/[\/\\]client[\/\\]/.test(id)) delete require.cache[id];
61+
// });
62+
// });
1863
}
1964

65+
const server = http.createServer(app);
2066

21-
app.listen(3000, function () {
22-
console.log('>>>> RUNNING ON localhost:3000');
23-
});
67+
server.listen(3000, function() {
68+
const address = server.address();
69+
console.log(`${'>>>'.cyan} ${'Listening on:'.rainbow} ${'localhost::'.trap.magenta}${`${address.port}`.green}`);
70+
});

src/server/ssr.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ function renderApp(res, store, assets, renderProps) {
1919

2020
const htmlStream = renderToStaticMarkup(
2121
<Html
22-
title="Super Future"
22+
title="HMR | SSR | FTW"
2323
store={store}
2424
assets={assets}
2525
renderProps={renderProps}

0 commit comments

Comments
 (0)