1 | /* |
||
2 | * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony) |
||
3 | * |
||
4 | * Copyright (C) 2019 - 2023 Jan Böhmer (https://github.com/jbtronics) |
||
5 | * |
||
6 | * This program is free software; you can redistribute it and/or |
||
7 | * modify it under the terms of the GNU General Public License |
||
8 | * as published by the Free Software Foundation; either version 2 |
||
9 | * of the License, or (at your option) any later version. |
||
10 | * |
||
11 | * This program is distributed in the hope that it will be useful, |
||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
14 | * GNU General Public License for more details. |
||
15 | * |
||
16 | * You should have received a copy of the GNU General Public License |
||
17 | * along with this program; if not, write to the Free Software |
||
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA |
||
19 | * |
||
20 | */ |
||
21 | |||
22 | var Encore = require('@symfony/webpack-encore'); |
||
23 | |||
24 | const zlib = require('zlib'); |
||
0 ignored issues
–
show
Unused Code
introduced
by
![]() |
|||
25 | const CompressionPlugin = require("compression-webpack-plugin"); |
||
26 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; |
||
27 | const CKEditorWebpackPlugin = require( '@ckeditor/ckeditor5-dev-webpack-plugin' ); |
||
28 | const { styles } = require( '@ckeditor/ckeditor5-dev-utils' ); |
||
29 | |||
30 | // Manually configure the runtime environment if not already configured yet by the "encore" command. |
||
31 | // It's useful when you use tools that rely on webpack.config.js file. |
||
32 | if (!Encore.isRuntimeEnvironmentConfigured()) { |
||
33 | Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev'); |
||
34 | } |
||
35 | |||
36 | Encore |
||
37 | // directory where compiled assets will be stored |
||
38 | .setOutputPath('public/build/') |
||
39 | // public path used by the web server to access the output path |
||
40 | .setPublicPath('/build') |
||
41 | // only needed for CDN's or subdirectory deploy |
||
42 | //.setManifestKeyPrefix('build/') |
||
43 | |||
44 | /** |
||
45 | * If you are putting Part-DB into a sub directory you have to uncomment these lines and |
||
46 | * replace "part-db/" with your path to Part-DB |
||
47 | */ |
||
48 | //.setPublicPath('/part-db/build') |
||
49 | //.setManifestKeyPrefix('build/') |
||
50 | |||
51 | /* |
||
52 | * ENTRY CONFIG |
||
53 | * |
||
54 | * Add 1 entry for each "page" of your app |
||
55 | * (including one that's included on every page - e.g. "app") |
||
56 | * |
||
57 | * Each entry will result in one JavaScript file (e.g. app.js) |
||
58 | * and one CSS file (e.g. app.css) if you JavaScript imports CSS. |
||
59 | */ |
||
60 | .addEntry('app', './assets/js/app.js') |
||
61 | .addEntry('webauthn_tfa', './assets/js/webauthn_tfa.js') |
||
62 | |||
63 | |||
64 | |||
65 | |||
66 | // enables the Symfony UX Stimulus bridge (used in assets/bootstrap.js) |
||
67 | .enableStimulusBridge('./assets/controllers.json') |
||
68 | //.addEntry('page1', './assets/js/page1.js') |
||
69 | //.addEntry('page2', './assets/js/page2.js') |
||
70 | |||
71 | // When enabled, Webpack "splits" your files into smaller pieces for greater optimization. |
||
72 | .splitEntryChunks() |
||
73 | |||
74 | // will require an extra script tag for runtime.js |
||
75 | // but, you probably want this, unless you're building a single-page app |
||
76 | .enableSingleRuntimeChunk() |
||
77 | |||
78 | /* |
||
79 | * FEATURE CONFIG |
||
80 | * |
||
81 | * Enable & configure other features below. For a full |
||
82 | * list of features, see: |
||
83 | * https://symfony.com/doc/current/frontend.html#adding-more-features |
||
84 | */ |
||
85 | .cleanupOutputBeforeBuild() |
||
86 | .enableBuildNotifications() |
||
87 | .enableSourceMaps(!Encore.isProduction()) |
||
88 | // enables hashed filenames (e.g. app.abc123.css) |
||
89 | //.enableVersioning(Encore.isProduction()) |
||
90 | .enableVersioning() |
||
91 | |||
92 | |||
93 | |||
94 | // configure Babel |
||
95 | // .configureBabel((config) => { |
||
96 | // config.plugins.push('@babel/a-babel-plugin'); |
||
97 | // }) |
||
98 | |||
99 | // enables and configure @babel/preset-env polyfills |
||
100 | .configureBabelPresetEnv((config) => { |
||
101 | config.useBuiltIns = 'usage'; |
||
102 | config.corejs = '3.23'; |
||
103 | }) |
||
104 | // enables Sass/SCSS support |
||
105 | //.enableSassLoader() |
||
106 | |||
107 | // uncomment if you use TypeScript |
||
108 | .enableTypeScriptLoader() |
||
109 | |||
110 | // uncomment if you use React |
||
111 | //.enableReactPreset() |
||
112 | |||
113 | // uncomment to get integrity="..." attributes on your script & link tags |
||
114 | // requires WebpackEncoreBundle 1.4 or higher |
||
115 | .enableIntegrityHashes(Encore.isProduction()) |
||
116 | |||
117 | // uncomment if you're having problems with a jQuery plugin |
||
118 | .autoProvidejQuery() |
||
119 | |||
120 | .addPlugin( new CKEditorWebpackPlugin( { |
||
121 | // See https://ckeditor.com/docs/ckeditor5/latest/features/ui-language.html |
||
122 | language: 'en', |
||
123 | addMainLanguageTranslationsToAllAssets: true, |
||
124 | additionalLanguages: 'all', |
||
125 | outputDirectory: 'ckeditor_translations' |
||
126 | } ) ) |
||
127 | |||
128 | // Use raw-loader for CKEditor 5 SVG files. |
||
129 | .addRule( { |
||
130 | test: /ckeditor5-[^/\\]+[/\\]theme[/\\]icons[/\\][^/\\]+\.svg$/, |
||
131 | loader: 'raw-loader' |
||
132 | } ) |
||
133 | |||
134 | // Configure other image loaders to exclude CKEditor 5 SVG files. |
||
135 | .configureLoaderRule( 'images', loader => { |
||
136 | loader.exclude = /ckeditor5-[^/\\]+[/\\]theme[/\\]icons[/\\][^/\\]+\.svg$/; |
||
137 | } ) |
||
138 | |||
139 | // Configure PostCSS loader. |
||
140 | .addLoader({ |
||
141 | test: /ckeditor5-[^/\\]+[/\\]theme[/\\].+\.css$/, |
||
142 | loader: 'postcss-loader', |
||
143 | options: { |
||
144 | postcssOptions: styles.getPostCssConfig( { |
||
145 | themeImporter: { |
||
146 | themePath: require.resolve( '@ckeditor/ckeditor5-theme-lark' ) |
||
147 | }, |
||
148 | minify: true |
||
149 | } ) |
||
150 | } |
||
151 | } ) |
||
152 | |||
153 | ; |
||
154 | |||
155 | //These are all the themes that are available in bootswatch |
||
156 | const AVAILABLE_THEMES = ['bootstrap', 'cerulean', 'cosmo', 'cyborg', 'darkly', 'flatly', 'journal', |
||
157 | 'litera', 'lumen', 'lux', 'materia', 'minty', 'morph', 'pulse', 'quartz', 'sandstone', 'simplex', 'sketchy', 'slate', 'solar', |
||
158 | 'spacelab', 'superhero', 'united', 'vapor', 'yeti', 'zephyr']; |
||
159 | |||
160 | for (const theme of AVAILABLE_THEMES) { |
||
161 | Encore.addEntry('theme_' + theme, './assets/themes/'+theme+'.js'); |
||
162 | } |
||
163 | |||
164 | |||
165 | if (Encore.isProduction()) { |
||
166 | Encore.addPlugin(new CompressionPlugin({ |
||
167 | filename: '[path][base].br', |
||
168 | algorithm: 'brotliCompress', |
||
169 | test: /\.(js|css|html|svg)$/, |
||
170 | compressionOptions: { |
||
171 | // zlib’s `level` option matches Brotli’s `BROTLI_PARAM_QUALITY` option. |
||
172 | level: 11, |
||
173 | }, |
||
174 | //threshold: 10240, |
||
175 | minRatio: 0.8, |
||
176 | deleteOriginalAssets: false, |
||
177 | })) |
||
178 | |||
179 | .addPlugin(new CompressionPlugin({ |
||
180 | filename: '[path][base].gz', |
||
181 | algorithm: 'gzip', |
||
182 | test: /\.(js|css|html|svg)$/, |
||
183 | deleteOriginalAssets: false, |
||
184 | })) |
||
185 | } |
||
186 | |||
187 | if (Encore.isDev()) { |
||
188 | //Only uncomment if needed, as this cause problems with Github actions (job does not finish) |
||
189 | Encore.addPlugin(new BundleAnalyzerPlugin()); |
||
190 | } |
||
191 | |||
192 | |||
193 | module.exports = Encore.getWebpackConfig(); |
||
194 |