const Encore = require('@symfony/webpack-encore'); // Manually configure the runtime environment if not already configured yet by the "encore" command. // It's useful when you use tools that rely on webpack.config.js file. if (!Encore.isRuntimeEnvironmentConfigured()) { Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'prod'); } Encore // directory where compiled assets will be stored .setOutputPath('public/build/') // public path used by the web server to access the output path .setPublicPath('/build') // only needed for CDN's or subdirectory deploy //.setManifestKeyPrefix('build/') /* * ENTRY CONFIG * * Each entry will result in one JavaScript file (e.g. app.js) * and one CSS file (e.g. app.css) if your JavaScript imports CSS. */ .addEntry('app', './assets/app.js') .addEntry('app-rtl', './assets/app-rtl.js') .addEntry('export-pdf', './assets/export-pdf.js') .addEntry('invoice', './assets/invoice.js') .addEntry('invoice-pdf', './assets/invoice-pdf.js') .addEntry('chart', './assets/chart.js') .addEntry('calendar', './assets/calendar.js') .addEntry('dashboard', './assets/dashboard.js') .addEntry('highlight', './assets/highlight.js') // When enabled, Webpack "splits" your files into smaller pieces for greater optimization. .splitEntryChunks() // will require an extra script tag for runtime.js // but, you probably want this, unless you're building a single-page app .enableSingleRuntimeChunk() /* * FEATURE CONFIG * * Enable & configure other features below. For a full * list of features, see: * https://symfony.com/doc/current/frontend.html#adding-more-features */ .cleanupOutputBeforeBuild() // Displays build status system notifications to the user // .enableBuildNotifications() .enableSourceMaps(!Encore.isProduction()) // enables hashed filenames (e.g. app.abc123.css) .enableVersioning(Encore.isProduction()) .configureSplitChunks((splitChunks) => { splitChunks.chunks = 'async'; }) .configureBabel((config) => { config.sourceType = 'unambiguous'; config.plugins.push('@babel/plugin-syntax-dynamic-import'); }) .configureBabelPresetEnv((config) => { config.useBuiltIns = 'usage'; config.corejs = 3; config.targets = {}; config.modules = false; }) .enableIntegrityHashes(Encore.isProduction()) .enableSassLoader((options) => {}) .configureCssMinimizerPlugin((options) => { options.minimizerOptions = { preset: ['default', { discardComments: { removeAll: true } }], } }) // compress javascript in production build .configureTerserPlugin((options) => { options.terserOptions = { compress: true, output: { comments: false, }, // chart.js will fail if sources are mangled /* mangle: { properties: { regex: /^_/, }, }, */ } }) ; module.exports = Encore.getWebpackConfig();