const webpack = require('webpack'); const TerserPlugin = require('terser-webpack-plugin'); const path = require('path'); const config = require('sapper/config/webpack.js'); const pkg = require('./package.json'); const mode = process.env.NODE_ENV; const dev = mode === 'development'; const alias = { svelte: path.resolve('node_modules', 'svelte') }; const extensions = ['.mjs', '.js', '.json', '.svelte', '.html']; const mainFields = ['svelte', 'module', 'browser', 'main']; const onwarn = (warning, handler) => warning.code === 'css-unused-selector' || handler(warning); module.exports = { client: { entry: config.client.entry(), output: config.client.output(), resolve: { alias, extensions, mainFields }, module: { rules: [ { test: /\.(js|mjs|html|svelte)$/, exclude: /(node_modules\/@babel)/, use: { loader: 'babel-loader', options: { presets: [ ['@babel/preset-env', { targets: '> 0.25%, ie >= 8, not dead' }] ], plugins: [ '@babel/plugin-syntax-dynamic-import', '@babel/plugin-proposal-object-rest-spread', ['@babel/plugin-transform-runtime', { regenerator: true }], ], sourceType: 'unambiguous' } } }, { test: /\.(svelte|html)$/, use: { loader: 'svelte-loader', options: { dev, hydratable: true, hotReload: true, onwarn } } } ] }, mode, plugins: [ // pending https://github.com/sveltejs/svelte/issues/2377 // dev && new webpack.HotModuleReplacementPlugin(), new webpack.DefinePlugin({ 'process.browser': true, 'process.env.NODE_ENV': JSON.stringify(mode) }), ].filter(Boolean), devtool: dev && 'inline-source-map', optimization: { minimize: true, minimizer: [new TerserPlugin()], }, }, server: { entry: config.server.entry(), output: config.server.output(), target: 'node', resolve: { alias, extensions, mainFields }, externals: Object.keys(pkg.dependencies).concat('encoding'), module: { rules: [ { test: /\.(svelte|html)$/, use: { loader: 'svelte-loader', options: { css: false, generate: 'ssr', dev, onwarn } } } ] }, mode: process.env.NODE_ENV, performance: { hints: false // it doesn't matter if server.js is large }, }, serviceworker: { entry: config.serviceworker.entry(), output: config.serviceworker.output(), mode: process.env.NODE_ENV } };