add webpack for front end builds and serve the assets from backend

This commit is contained in:
Ondřej Synáček 2020-07-17 19:29:18 +02:00
parent 9da4c33ffd
commit 565354bcb6
13 changed files with 4743 additions and 15 deletions

View File

@ -46,20 +46,18 @@ app.set('view engine', 'ejs')
app.set('views', path.join(__dirname, 'views'))
app.set('trust proxy', 1)
app.use(express.static(path.join(__dirname, 'public')))
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')))
app.use(express.static(path.join(__dirname, '..', 'dist')))
//app.use(favicon(path.join(__dirname, '..', 'dist', 'favicon.ico')))
app.use(bodyParser.urlencoded({ extended: true }))
const indexFile = path.join(__dirname, '..', 'dist', 'index.html')
if (certEndpoint) {
app.get(`/${certEndpoint}`, (req, res) => {
res.status(200).send(certSecret)
})
}
app.get('/', (req, res) => {
res.render('index', { version })
})
app.get('/error', (req, res) => {
const error = req.error || req.query.error || ''

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="manifest" href="/manifest.json">
<link rel="apple-touch-icon" sizes="180x180" href="/icon-180.png">
<link rel="stylesheet" type="text/css" href="/style.css?9">
<link rel="stylesheet" type="text/css" href="/style.css">
<title>Facebook Event to iCal Converter</title>
</head>
@ -74,12 +74,10 @@
</article>
<footer>
v.<%= version %> ◆
v.<%= htmlWebpackPlugin.options.version %> ◆
<a href="https://ondrejsynacek.com" target="_blank">Ondrej Synacek</a> (2019) ◆
<a href="https://github.com/comatory/fb2iCal" target="_blank" title="Github">Source</a>
<a href="/about" target="_blank" title="About the project">About</about>
</footer>
<script src="/scripts.js?6"></script>
</body>
</html>

View File

@ -306,7 +306,7 @@
if (window.navigator && window.navigator.serviceWorker && !noJS()) {
const serviceWorker = window.navigator.serviceWorker
serviceWorker.register('service-worker.js', {
serviceWorker.register('sw.js', {
scope: './',
}).then((registration) => {
setServiceWorkerStatus(`Service worker registered with scope ${registration.scope}`)

4690
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -8,9 +8,11 @@
"node": "10.15.0"
},
"scripts": {
"start": "node lib/index.js",
"start:dev": "NODE_ENV=development PORT=3000 nodemon lib/index.js",
"start:dev:inspect": "NODE_ENV=development PORT=3000 nodemon --inspect lib/index.js",
"build": "webpack --mode=production",
"build:dev": "webpack --mode=development",
"start": "npm run build && node lib/index.js",
"start:dev": "concurrently \"npm run build:dev\" \"NODE_ENV=development PORT=3000 nodemon lib/index.js\"",
"start:dev:inspect": "npm run build:dev && NODE_ENV=development PORT=3000 nodemon --inspect lib/index.js",
"test": "jest"
},
"keywords": [
@ -40,8 +42,14 @@
"devDependencies": {
"chai": "^4.2.0",
"chai-sinon": "^2.8.1",
"concurrently": "^5.2.0",
"copy-webpack-plugin": "^6.0.3",
"html-webpack-plugin": "^4.3.0",
"jest": "^26.1.0",
"nodemon": "^1.19.3",
"sinon": "^9.0.2"
"sinon": "^9.0.2",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.12",
"workbox-webpack-plugin": "^5.1.3"
}
}

34
webpack.config.js Normal file
View File

@ -0,0 +1,34 @@
const path = require('path')
const pkg = require('./package.json')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const { GenerateSW } = require('workbox-webpack-plugin')
const destination = path.join(__dirname, 'dist')
const isDevelopment = Boolean(process.argv[2] && process.argv[2].includes('mode=development'))
module.exports = {
entry: path.join(__dirname, 'lib', 'static', 'scripts.js'),
watch: isDevelopment,
output: {
filename: '[name].[hash].js',
path: destination,
},
plugins: [
new CopyWebpackPlugin({
patterns: [
{ from: path.join(__dirname, 'lib', 'static', '{*.ico,*.json,*.png,*.css}'), to: destination, flatten: true },
],
}),
new HtmlWebpackPlugin({
template: path.join(__dirname, 'lib', 'static', 'index.html'),
version: pkg.version,
inject: 'body',
}),
new GenerateSW({
swDest: 'sw.js',
clientsClaim: true,
skipWaiting: true,
}),
],
}