Hot reloading with webpack

This commit is contained in:
Lucas Verney 2016-07-26 15:59:18 +02:00
parent ef4dfd1176
commit 414f05df44
12 changed files with 1997 additions and 834 deletions

View File

@ -46,6 +46,6 @@ module.exports = {
"react/jsx-uses-vars": "error", "react/jsx-uses-vars": "error",
// Disable no-console rule in production // Disable no-console rule in production
"no-console": process.env.NODE_ENV !== "production" ? "off" : ["error"] "no-console": process.env.NODE_ENV !== "production" ? "off" : "error"
} }
}; };

2
.gitignore vendored
View File

@ -1 +1,3 @@
node_modules node_modules
app/dist/eventsourcePolyfill.js
app/dist/webpackHotMiddlewareClient.js

552
app/dist/fix.ie9.js vendored

File diff suppressed because one or more lines are too long

2202
app/dist/index.js vendored

File diff suppressed because one or more lines are too long

View File

@ -242,7 +242,7 @@ export default store => next => reduxAction => {
}, },
error => { error => {
if (failureDispatch) { if (failureDispatch) {
store.dispatch(failureDispatch(error)); store.dispatch(failureDispatch(error.message));
} }
} }
); );

View File

@ -1,6 +1,6 @@
import { createReducer } from "../utils"; import { createReducer } from "../utils";
export const DEFAULT_LIMIT = 1; /** Default max number of elements to retrieve. */ export const DEFAULT_LIMIT = 30; /** Default max number of elements to retrieve. */
const initialState = { const initialState = {
isFetching: false, isFetching: false,

View File

@ -5,17 +5,46 @@ import "./app/styles/ampache.css";
// Handle app init // Handle app init
import React from "react"; import React from "react";
import { render } from "react-dom"; import ReactDOM from "react-dom";
import { hashHistory } from "react-router"; import { hashHistory } from "react-router";
import { syncHistoryWithStore } from "react-router-redux"; import { syncHistoryWithStore } from "react-router-redux";
import Root from "./app/containers/Root";
import configureStore from "./app/store/configureStore"; import configureStore from "./app/store/configureStore";
const store = configureStore(); const store = configureStore();
const history = syncHistoryWithStore(hashHistory, store); const history = syncHistoryWithStore(hashHistory, store);
render( const rootElement = document.getElementById("root");
let render = () => {
const Root = require("./app/containers/Root").default;
ReactDOM.render(
<Root store={store} history={history} />, <Root store={store} history={history} />,
document.getElementById("root") rootElement
); );
};
if (module.hot) {
// Support hot reloading of components
// and display an overlay for runtime errors
const renderApp = render;
const renderError = (error) => {
const RedBox = require("redbox-react");
ReactDOM.render(
<RedBox error={error} />,
rootElement
);
};
render = () => {
try {
renderApp();
} catch (error) {
renderError(error);
}
};
module.hot.accept("./app/containers/Root", () => {
setTimeout(render);
});
}
render();

View File

@ -31,7 +31,7 @@
</div> </div>
<!-- React views and stuff --> <!-- React views and stuff -->
<script src="app/dist/index.js"></script> <script src="./app/dist/index.js"></script>
</body> </body>
</html> </html>

View File

@ -6,6 +6,10 @@
"license": "MIT", "license": "MIT",
"homepage": "https://github.com/Phyks/ampache_react", "homepage": "https://github.com/Phyks/ampache_react",
"repository": "git+https://github.com/Phyks/ampache_react.git", "repository": "git+https://github.com/Phyks/ampache_react.git",
"scripts": {
"build": "./node_modules/webpack/bin/webpack.js --progress",
"serve": "./node_modules/webpack-dev-server/bin/webpack-dev-server.js --progress --hot"
},
"dependencies": { "dependencies": {
"babel-polyfill": "^6.9.1", "babel-polyfill": "^6.9.1",
"babel-preset-es2015": "^6.9.0", "babel-preset-es2015": "^6.9.0",
@ -39,6 +43,7 @@
"eslint": "^3.1.1", "eslint": "^3.1.1",
"eslint-loader": "^1.4.1", "eslint-loader": "^1.4.1",
"eslint-plugin-react": "^5.2.2", "eslint-plugin-react": "^5.2.2",
"eventsource-polyfill": "^0.9.6",
"extract-text-webpack-plugin": "^1.0.1", "extract-text-webpack-plugin": "^1.0.1",
"file-loader": "^0.9.0", "file-loader": "^0.9.0",
"postcss": "^5.1.0", "postcss": "^5.1.0",
@ -46,11 +51,14 @@
"postcss-reporter": "^1.4.1", "postcss-reporter": "^1.4.1",
"precss": "^1.4.0", "precss": "^1.4.0",
"react-a11y": "^0.3.3", "react-a11y": "^0.3.3",
"redbox-react": "^1.2.10",
"redux-logger": "^2.6.1", "redux-logger": "^2.6.1",
"style-loader": "^0.13.1", "style-loader": "^0.13.1",
"stylelint": "^7.0.3", "stylelint": "^7.0.3",
"stylelint-config-standard": "^11.0.0", "stylelint-config-standard": "^11.0.0",
"url-loader": "^0.5.7", "url-loader": "^0.5.7",
"webpack": "^1.13.1" "webpack": "^1.13.1",
"webpack-dev-server": "^1.14.1",
"webpack-hot-middleware": "^2.12.1"
} }
} }

View File

@ -18,7 +18,7 @@ module.exports = {
output: { output: {
path: path.join(__dirname, "app/dist"), path: path.join(__dirname, "app/dist"),
filename: "[name].js", filename: "[name].js",
publicPath: "./" publicPath: "/app/dist"
}, },
module: { module: {

View File

@ -3,4 +3,13 @@ var config = require("./webpack.config.base.js");
config.devtool = "cheap-module-eval-source-map"; config.devtool = "cheap-module-eval-source-map";
// necessary for hot reloading with IE:
config.entry.eventsourcePolyfill = 'eventsource-polyfill';
// listen to code updates emitted by hot middleware:
config.entry.webpackHotMiddlewareClient = 'webpack-hot-middleware/client';
config.plugins = config.plugins.concat([
new webpack.HotModuleReplacementPlugin()
]);
module.exports = config; module.exports = config;

View File

@ -11,6 +11,11 @@ config.devtool = "#source-map";
config.plugins = config.plugins.concat([ config.plugins = config.plugins.concat([
new webpack.NoErrorsPlugin(), new webpack.NoErrorsPlugin(),
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify('production')
}
}),
new webpack.optimize.OccurenceOrderPlugin(true), new webpack.optimize.OccurenceOrderPlugin(true),
new webpack.optimize.DedupePlugin(), new webpack.optimize.DedupePlugin(),
new webpack.optimize.UglifyJsPlugin({ new webpack.optimize.UglifyJsPlugin({