import path from "path"; import fs from "fs"; import svelte from "rollup-plugin-svelte"; import cssOnlyRollupPlugin from "rollup-plugin-css-only"; import resolve from "@rollup/plugin-node-resolve"; import commonjs from "@rollup/plugin-commonjs"; import {terser} from "rollup-plugin-terser"; import livereloadRollupPlugin from "rollup-plugin-livereload"; import scssPlugin from "rollup-plugin-scss"; const production = process.env.ENV === 'production'; const buildDir = process.env.BUILD_DIR; const publicDir = process.env.PUBLIC_DIR; const input = process.env.INPUT.split(':'); export default commandLineArgs => ({ input: input, output: { format: 'es', sourcemap: true, dir: path.join(publicDir, 'js'), entryFileNames: (chunkInfo) => { const name = chunkInfo.facadeModuleId ? path.relative(buildDir, chunkInfo.facadeModuleId) : chunkInfo.name; return name + '.js'; }, chunkFileNames: '[name].js', }, plugins: [ scssPlugin({ output: function (styles, styleNodes) { if (!fs.existsSync(path.join(publicDir, 'css'))) { fs.mkdirSync(path.join(publicDir, 'css')); } fs.writeFileSync(path.join(publicDir, 'css', 'bundle.css'), styles); for (const node of Object.keys(styleNodes)) { if (node.endsWith('.scss')) { fs.writeFileSync(path.join(publicDir, 'css', path.basename(node, '.scss') + '.css'), styleNodes[node]); } } }, }), svelte({ compilerOptions: { dev: !production, hydratable: true, }, }), // Extract css into separate files cssOnlyRollupPlugin({output: 'bundle.css'}), // If you have external dependencies installed from // npm, you'll most likely need these plugins. In // some cases you'll need additional configuration - // consult the documentation for details: // https://github.com/rollup/plugins/tree/master/packages/commonjs resolve({ browser: true, dedupe: ['svelte'], }), commonjs(), // Live reload in dev !production && !!commandLineArgs.watch && livereloadRollupPlugin(publicDir), // Minify in production production && terser(), ], watch: { clearScreen: false, }, });