fix: enable code spliting for app

This commit is contained in:
Lakhan Samani 2021-12-29 04:16:31 +05:30
parent b4b8593879
commit 4c53eb97d2
12 changed files with 65 additions and 246 deletions

View File

@ -6,4 +6,5 @@ README.md
ROADMAP.md ROADMAP.md
build build
.env .env
data.db data.db
app/node_modules

View File

@ -3,6 +3,8 @@ VERSION := $(or $(VERSION),$(DEFAULT_VERSION))
cmd: cmd:
cd server && go build -ldflags "-w -X main.VERSION=$(VERSION)" -o '../build/server' cd server && go build -ldflags "-w -X main.VERSION=$(VERSION)" -o '../build/server'
build-app:
cd app && npm i && npm run build
clean: clean:
rm -rf build rm -rf build
test: test:

View File

@ -1,16 +0,0 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #374151;
font-size: 14px;
}
*,
*:before,
*:after {
box-sizing: inherit;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

11
app/esbuild.config.js Normal file
View File

@ -0,0 +1,11 @@
const __is_prod__ = process.env.NODE_ENV === 'production';
require('esbuild').build({
entryPoints: ['src/index.tsx'],
chunkNames: '[name]-[hash]',
bundle: true,
minify: __is_prod__,
outdir: 'build',
splitting: true,
format: 'esm',
watch: !__is_prod__,
});

View File

@ -4,7 +4,8 @@
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"build": "esbuild src/index.tsx --bundle --minify --sourcemap --outfile=build/bundle.js" "build": "rm -rf build && NODE_ENV=production node ./esbuild.config.js",
"start": "NODE_ENV=development node ./esbuild.config.js"
}, },
"keywords": [], "keywords": [],
"author": "Lakhan Samani", "author": "Lakhan Samani",

View File

@ -1,9 +1,10 @@
import React, { useEffect } from 'react'; import React, { useEffect, lazy, Suspense } from 'react';
import { Switch, Route } from 'react-router-dom'; import { Switch, Route } from 'react-router-dom';
import { useAuthorizer } from '@authorizerdev/authorizer-react'; import { useAuthorizer } from '@authorizerdev/authorizer-react';
import Dashboard from './pages/dashboard';
import Login from './pages/login'; const ResetPassword = lazy(() => import('./pages/rest-password'));
import ResetPassword from './pages/rest-password'; const Login = lazy(() => import('./pages/login'));
const Dashboard = lazy(() => import('./pages/dashboard'));
export default function Root() { export default function Root() {
const { token, loading, config } = useAuthorizer(); const { token, loading, config } = useAuthorizer();
@ -24,22 +25,26 @@ export default function Root() {
if (token) { if (token) {
return ( return (
<Switch> <Suspense fallback={<></>}>
<Route path="/app" exact> <Switch>
<Dashboard /> <Route path="/app" exact>
</Route> <Dashboard />
</Switch> </Route>
</Switch>
</Suspense>
); );
} }
return ( return (
<Switch> <Suspense fallback={<></>}>
<Route path="/app" exact> <Switch>
<Login /> <Route path="/app" exact>
</Route> <Login />
<Route path="/app/reset-password"> </Route>
<ResetPassword /> <Route path="/app/reset-password">
</Route> <ResetPassword />
</Switch> </Route>
</Switch>
</Suspense>
); );
} }

16
app/src/index.css Normal file
View File

@ -0,0 +1,16 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #374151;
font-size: 14px;
}
*,
*:before,
*:after {
box-sizing: inherit;
}

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import App from './App'; import App from './App';
import './index.css';
ReactDOM.render(<App />, document.getElementById('root')); ReactDOM.render(<App />, document.getElementById('root'));

View File

@ -2,11 +2,11 @@ import React, { Fragment } from 'react';
import { AuthorizerResetPassword } from '@authorizerdev/authorizer-react'; import { AuthorizerResetPassword } from '@authorizerdev/authorizer-react';
export default function ResetPassword() { export default function ResetPassword() {
return ( return (
<Fragment> <Fragment>
<h1 style={{ textAlign: 'center' }}>Reset Password</h1> <h1 style={{ textAlign: 'center' }}>Reset Password</h1>
<br /> <br />
<AuthorizerResetPassword /> <AuthorizerResetPassword />
</Fragment> </Fragment>
); );
} }

View File

@ -5,13 +5,13 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title> <title>Document</title>
<link rel="stylesheet" href="/app/build/bundle.css"> <link rel="stylesheet" href="/app/build/index.css">
<script> <script>
window.__authorizer__ = {{.data}} window.__authorizer__ = {{.data}}
</script> </script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script src="/app/build/bundle.js"></script> <script type="module" src="/app/build/index.js"></script>
</body> </body>
</html> </html>