1
Fork 0
photoview/ui/build.mjs

91 lines
2.3 KiB
JavaScript
Raw Normal View History

import fs from 'fs-extra'
import esbuild from 'esbuild'
import babel from 'esbuild-plugin-babel'
import browserSync from 'browser-sync'
import historyApiFallback from 'connect-history-api-fallback'
import dotenv from 'dotenv'
import workboxBuild from 'workbox-build'
dotenv.config()
const bs = browserSync.create()
2021-02-25 14:51:02 +01:00
const production = process.env.NODE_ENV == 'production'
2021-02-25 13:23:22 +01:00
const watchMode = process.argv[2] == 'watch'
2021-02-25 14:51:02 +01:00
const ENVIRONMENT_VARIABLES = ['NODE_ENV', 'PHOTOVIEW_API_ENDPOINT']
const defineEnv = ENVIRONMENT_VARIABLES.reduce((acc, key) => {
2021-02-26 19:52:35 +01:00
acc[`process.env.${key}`] = process.env[key] ? `"${process.env[key]}"` : null
2021-02-25 14:51:02 +01:00
return acc
}, {})
2021-02-25 13:23:22 +01:00
const esbuildOptions = {
2021-04-12 00:14:27 +02:00
entryPoints: ['src/index.tsx'],
plugins: [
babel({
filter: /photoview\/ui\/src\/.*\.js$/,
}),
],
2021-02-25 15:38:09 +01:00
publicPath: process.env.UI_PUBLIC_URL || '/',
outdir: 'dist',
2021-02-25 13:23:22 +01:00
format: 'esm',
bundle: true,
platform: 'browser',
target: ['chrome58', 'firefox57', 'safari11', 'edge16'],
2021-02-25 13:23:22 +01:00
splitting: true,
minify: production,
sourcemap: !production,
loader: {
'.js': 'jsx',
2021-02-25 13:23:22 +01:00
'.svg': 'file',
'.woff': 'file',
'.woff2': 'file',
'.ttf': 'file',
'.eot': 'file',
'.png': 'file',
},
2021-02-25 14:51:02 +01:00
define: defineEnv,
2021-02-25 13:23:22 +01:00
incremental: watchMode,
}
2021-02-25 13:53:00 +01:00
fs.emptyDirSync('dist/')
fs.copyFileSync('src/index.html', 'dist/index.html')
2021-02-25 13:37:45 +01:00
fs.copyFileSync('src/manifest.webmanifest', 'dist/manifest.json')
fs.copyFileSync('src/favicon.ico', 'dist/favicon.ico')
fs.copySync('src/assets/', 'dist/assets/')
2021-02-25 13:23:22 +01:00
if (watchMode) {
let builderPromise = esbuild.build(esbuildOptions)
2021-02-25 13:23:22 +01:00
bs.init({
server: {
baseDir: './dist',
middleware: [historyApiFallback()],
},
port: 1234,
open: false,
})
bs.watch('src/**/*.js').on('change', async args => {
console.log('reloading', args)
builderPromise = (await builderPromise).rebuild()
bs.reload(args)
})
} else {
const esbuildPromise = esbuild
.build(esbuildOptions)
.then(() => console.log('esbuild done'))
const workboxPromise = workboxBuild
.generateSW({
globDirectory: 'dist/',
globPatterns: ['**/*.{png,svg,woff2,ttf,eot,woff,js,ico,html,json,css}'],
swDest: 'dist/service-worker.js',
})
.then(() => console.log('workbox done'))
Promise.all([esbuildPromise, workboxPromise]).then(() =>
console.log('build complete')
)
2021-02-25 13:23:22 +01:00
}