Testing minimizing and code splitting

This commit is contained in:
2019-05-27 01:39:13 +10:00
parent a2d80c29b7
commit dffae067ab
5 changed files with 58 additions and 26 deletions
+16
View File
@@ -370,6 +370,14 @@
"@babel/helper-plugin-utils": "^7.0.0" "@babel/helper-plugin-utils": "^7.0.0"
} }
}, },
"@babel/plugin-syntax-dynamic-import": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz",
"integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
"requires": {
"@babel/helper-plugin-utils": "^7.0.0"
}
},
"@babel/plugin-syntax-json-strings": { "@babel/plugin-syntax-json-strings": {
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
@@ -5685,6 +5693,14 @@
"react-base16-styling": "^0.5.1" "react-base16-styling": "^0.5.1"
} }
}, },
"react-loadable": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz",
"integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==",
"requires": {
"prop-types": "^15.5.0"
}
},
"react-markdown": { "react-markdown": {
"version": "4.0.8", "version": "4.0.8",
"resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-4.0.8.tgz", "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-4.0.8.tgz",
+2
View File
@@ -15,6 +15,7 @@
"license": "", "license": "",
"dependencies": { "dependencies": {
"@babel/core": "^7.4.4", "@babel/core": "^7.4.4",
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
"@babel/preset-env": "^7.4.4", "@babel/preset-env": "^7.4.4",
"@babel/preset-react": "^7.0.0", "@babel/preset-react": "^7.0.0",
"babel-loader": "^8.0.5", "babel-loader": "^8.0.5",
@@ -29,6 +30,7 @@
"query-string": "^6.5.0", "query-string": "^6.5.0",
"react": "^16.8.6", "react": "^16.8.6",
"react-dom": "^16.8.6", "react-dom": "^16.8.6",
"react-loadable": "^5.5.0",
"react-markdown": "^4.0.8", "react-markdown": "^4.0.8",
"react-redux": "^7.0.3", "react-redux": "^7.0.3",
"react-router": "^5.0.0", "react-router": "^5.0.0",
+3 -3
View File
@@ -44,9 +44,9 @@ profiles.runGoldTick(connection);
app.use('/styles', express.static(path.resolve(__dirname + '/../public/styles')) ); app.use('/styles', express.static(path.resolve(__dirname + '/../public/styles')) );
app.use('/img', express.static(path.resolve(__dirname + '/../public/img')) ); app.use('/img', express.static(path.resolve(__dirname + '/../public/img')) );
//the app file //the app file(s)
app.get('/app.bundle.js', (req, res) => { app.get('/*app.bundle.js', (req, res) => {
res.sendFile(path.resolve(__dirname + '/../public/app.bundle.js')); res.sendFile(path.resolve(`${__dirname}/../public/${req.originalUrl}`));
}); });
//fallback //fallback
+21 -22
View File
@@ -1,22 +1,21 @@
import React from 'react'; import React from 'react';
import { BrowserRouter, Switch, Route } from 'react-router-dom'; import { BrowserRouter, Switch, Route } from 'react-router-dom';
import Loadable from 'react-loadable';
//include pages
import Home from './pages/home.jsx';
import Signup from './pages/signup.jsx';
import Login from './pages/login.jsx';
import PasswordChange from './pages/password_change.jsx';
import PasswordRecover from './pages/password_recover.jsx';
import PasswordReset from './pages/password_reset.jsx';
import Profile from './pages/profile.jsx';
import Ladder from './pages/ladder.jsx';
import PageNotFound from './pages/page_not_found.jsx';
//other stuff //other stuff
import Footer from './panels/footer.jsx'; import Footer from './panels/footer.jsx';
//lazy route loading
const LazyRoute = (props) => {
const component = Loadable({
loader: props.component,
loading: () => <div>Loading...</div>,
});
return <Route {...props} component={component} />;
};
//the app class
export default class App extends React.Component { export default class App extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
@@ -29,17 +28,17 @@ export default class App extends React.Component {
<img className='banner' src={'/img/flag_scaled.png'} /> <img className='banner' src={'/img/flag_scaled.png'} />
<BrowserRouter> <BrowserRouter>
<Switch> <Switch>
<Route exact path='/' component={Home} /> <LazyRoute exact path='/' component={() => import('./pages/home.jsx')} />
<Route path='/signup' component={Signup} /> <LazyRoute path='/signup' component={() => import('./pages/signup.jsx')} />
<Route path='/login' component={Login} /> <LazyRoute path='/login' component={() => import('./pages/login.jsx')} />
<Route path='/passwordchange' component={PasswordChange} /> <LazyRoute path='/passwordchange' component={() => import('./pages/password_change.jsx')} />
<Route path='/passwordrecover' component={PasswordRecover} /> <LazyRoute path='/passwordrecover' component={() => import('./pages/password_recover.jsx')} />
<Route path='/passwordreset' component={PasswordReset} /> <LazyRoute path='/passwordreset' component={() => import('./pages/password_reset.jsx')} />
<Route path='/profile' component={Profile} /> <LazyRoute path='/profile' component={() => import('./pages/profile.jsx')} />
<Route path='/ladder' component={Ladder} /> <LazyRoute path='/ladder' component={() => import('./pages/ladder.jsx')} />
<Route path='*' component={PageNotFound} /> <LazyRoute path='*' component={() => import('./pages/page_not_found.jsx')} />
</Switch> </Switch>
</BrowserRouter> </BrowserRouter>
<Footer /> <Footer />
+16 -1
View File
@@ -1,3 +1,5 @@
const TerserPlugin = require('terser-webpack-plugin');
module.exports = { module.exports = {
entry: './src/index.jsx', entry: './src/index.jsx',
output: { output: {
@@ -14,10 +16,23 @@ module.exports = {
use: { use: {
loader: 'babel-loader', loader: 'babel-loader',
options: { options: {
presets: ['@babel/preset-env', '@babel/preset-react'] presets: ['@babel/preset-env', '@babel/preset-react'],
plugins: ['react-loadable/babel', '@babel/plugin-syntax-dynamic-import']
} }
} }
} }
] ]
},
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
terserOptions: {
output: {
comments: false,
},
},
})
]
} }
}; };