mirror of
https://github.com/danbulant/Mangades
synced 2026-05-19 04:08:46 +00:00
94 lines
3 KiB
JavaScript
94 lines
3 KiB
JavaScript
import svelte from 'rollup-plugin-svelte-hot';
|
|
import Hmr from 'rollup-plugin-hot'
|
|
import resolve from '@rollup/plugin-node-resolve';
|
|
import commonjs from '@rollup/plugin-commonjs';
|
|
import livereload from 'rollup-plugin-livereload';
|
|
import { terser } from 'rollup-plugin-terser';
|
|
import { copySync, removeSync } from 'fs-extra'
|
|
import { spassr } from 'spassr'
|
|
import getConfig from '@roxi/routify/lib/utils/config'
|
|
import autoPreprocess from 'svelte-preprocess'
|
|
import postcssImport from 'postcss-import'
|
|
import { injectManifest } from 'rollup-plugin-workbox'
|
|
|
|
|
|
const { distDir } = getConfig() // use Routify's distDir for SSOT
|
|
const assetsDir = 'assets'
|
|
const buildDir = `${distDir}/build`
|
|
const isNollup = !!process.env.NOLLUP
|
|
const production = !process.env.ROLLUP_WATCH;
|
|
|
|
// clear previous builds
|
|
removeSync(distDir)
|
|
removeSync(buildDir)
|
|
|
|
|
|
const serve = () => ({
|
|
writeBundle: async () => {
|
|
const options = {
|
|
assetsDir: [assetsDir, distDir],
|
|
entrypoint: `${assetsDir}/__app.html`,
|
|
script: `${buildDir}/main.js`
|
|
}
|
|
spassr({ ...options, port: 5000 })
|
|
spassr({ ...options, ssr: true, port: 5005, ssrOptions: { inlineDynamicImports: true, dev: true } })
|
|
}
|
|
})
|
|
const copyToDist = () => ({ writeBundle() { copySync(assetsDir, distDir) } })
|
|
|
|
|
|
export default {
|
|
preserveEntrySignatures: false,
|
|
input: [`src/main.js`],
|
|
output: {
|
|
sourcemap: true,
|
|
format: 'esm',
|
|
dir: buildDir,
|
|
// for performance, disabling filename hashing in development
|
|
chunkFileNames:`[name]${production && '-[hash]' || ''}.js`
|
|
},
|
|
plugins: [
|
|
svelte({
|
|
emitCss: false,
|
|
hot: isNollup,
|
|
preprocess: [
|
|
autoPreprocess({
|
|
postcss: { plugins: [postcssImport()] },
|
|
defaults: { style: 'postcss' }
|
|
})
|
|
]
|
|
}),
|
|
|
|
// resolve matching modules from current working directory
|
|
resolve({
|
|
browser: true,
|
|
dedupe: importee => !!importee.match(/svelte(\/|$)/)
|
|
}),
|
|
commonjs(),
|
|
|
|
production && terser(),
|
|
!production && !isNollup && serve(),
|
|
!production && !isNollup && livereload(distDir), // refresh entire window when code is updated
|
|
!production && isNollup && Hmr({ inMemory: true, public: assetsDir, }), // refresh only updated code
|
|
{
|
|
// provide node environment on the client
|
|
transform: code => ({
|
|
code: code.replace(/process\.env\.NODE_ENV/g, `"${process.env.NODE_ENV}"`),
|
|
map: { mappings: '' }
|
|
})
|
|
},
|
|
injectManifest({
|
|
globDirectory: assetsDir,
|
|
globPatterns: ['**/*.{js,css,svg}', '__app.html'],
|
|
swSrc: `src/sw.js`,
|
|
swDest: `${distDir}/serviceworker.js`,
|
|
maximumFileSizeToCacheInBytes: 10000000, // 10 MB,
|
|
mode: 'production'
|
|
}),
|
|
production && copyToDist(),
|
|
],
|
|
watch: {
|
|
clearScreen: false,
|
|
buildDelay: 100,
|
|
}
|
|
}
|