You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
3.7 KiB
137 lines
3.7 KiB
import { plugin as hydration, preprocess } from '@jamcart/7ty/hydrate'
|
|
import { minify } from 'html-minifier-terser'
|
|
import path from 'path';
|
|
import url from 'url';
|
|
|
|
import json from '@rollup/plugin-json';
|
|
import alias from '@rollup/plugin-alias'
|
|
import commonjs from '@rollup/plugin-commonjs'
|
|
import copy from 'rollup-plugin-copy'
|
|
import css_chunks from 'rollup-plugin-css-chunks'
|
|
import del from 'rollup-plugin-delete'
|
|
import externals from 'rollup-plugin-node-externals'
|
|
import glob from 'rollup-plugin-glob'
|
|
import markdown from '@jackfranklin/rollup-plugin-markdown'
|
|
import multi_input from 'rollup-plugin-multi-input'
|
|
import replace from '@rollup/plugin-replace'
|
|
import resolve from '@rollup/plugin-node-resolve'
|
|
import svelte from 'rollup-plugin-svelte'
|
|
import { terser } from 'rollup-plugin-terser'
|
|
|
|
// get the absolute path to the dir above this one and strip off the stupid file: in front
|
|
//
|
|
let nourl = url.parse(import.meta.url).pathname;
|
|
// what in the world is wrong with people, url.pathname returns an invalid windows path
|
|
if(nourl.slice(0, 3) === "/C:") {
|
|
nourl = nourl.slice(1);
|
|
}
|
|
|
|
const root_path = path.dirname(nourl);
|
|
|
|
console.log("ROOT PATH IS", root_path, "URL PATH", nourl);
|
|
|
|
const minify_html = (options = {}) => {
|
|
return {
|
|
name: 'html-minifier-terser',
|
|
|
|
generateBundle(outputOptions, bundle) {
|
|
Object.values(bundle).forEach((file) => {
|
|
if (file.type === 'asset' && file.fileName.endsWith('.html')) {
|
|
file.source = minify(file.source.toString(), options)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
const shared_plugins = ({ browser, watch }) => {
|
|
return [
|
|
alias({
|
|
resolve: ['.js', '.svelte'],
|
|
entries: {
|
|
'$': path.join(root_path, '..')
|
|
}
|
|
}),
|
|
glob(),
|
|
markdown(),
|
|
replace({
|
|
'process.browser': JSON.stringify(browser),
|
|
'process.env.NODE_ENV': JSON.stringify(watch ? 'development' : ''),
|
|
preventAssignment: true
|
|
}),
|
|
resolve({ browser }),
|
|
commonjs({}),
|
|
json(),
|
|
]
|
|
}
|
|
|
|
|
|
export const client = ({ watch }) => {
|
|
return {
|
|
input: ['build/html/**/*.html'],
|
|
output: {
|
|
chunkFileNames: '[hash].js',
|
|
dir: '../public',
|
|
sourcemap: true
|
|
},
|
|
plugins: [
|
|
multi_input.default({ relative: 'build/html' }),
|
|
svelte({
|
|
compilerOptions: {
|
|
hydratable: true
|
|
},
|
|
emitCss: false
|
|
}),
|
|
hydration(),
|
|
copy({
|
|
targets: [
|
|
{ src: '../static/*', dest: '../public' },
|
|
{ src: ['build/server/**/*', '!**/*.js', '!**/*.js.map'], dest: '../public' }
|
|
]
|
|
}),
|
|
!watch && minify_html({
|
|
caseSensitive: true,
|
|
collapseWhitespace: true,
|
|
minifyCSS: true,
|
|
minifyJS: true
|
|
}),
|
|
false && !watch && terser(),
|
|
...shared_plugins({ browser: true, watch }),
|
|
]
|
|
}
|
|
}
|
|
|
|
|
|
export const server = ({ watch }) => {
|
|
return {
|
|
input: ['pages/**/[!_]*.svelte', '!pages/**/_*/**'],
|
|
output: {
|
|
dir: 'build/server',
|
|
entryFileNames: '[name]-[hash].js',
|
|
sourcemap: 'inline'
|
|
},
|
|
plugins: [
|
|
multi_input.default({ relative: 'pages' }),
|
|
del({targets: 'build' }),
|
|
svelte({
|
|
compilerOptions: {
|
|
generate: 'ssr',
|
|
hydratable: true,
|
|
immutable: true,
|
|
},
|
|
preprocess: [preprocess]
|
|
}),
|
|
css_chunks.default({
|
|
chunkFileNames: '[hash].css',
|
|
entryFileNames: '[hash].css'
|
|
}),
|
|
// rollup-plugin-node-externals speeds up the build.
|
|
// However, make sure any packages you import Svelte components from are
|
|
// declared as dependencies (not devDependencies) or they will also be excluded.
|
|
externals({
|
|
}),
|
|
...shared_plugins({ browser: false, watch })
|
|
]
|
|
}
|
|
}
|
|
|