@massimo-cassandro/minimo 1.39.2 → 1.40.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dev-tools/create-favicons/src/default-params.mjs +5 -5
- package/dev-tools/design-tokens-builder/tokens-config-sample.mjs +1 -1
- package/dev-tools/find-orphan-css-classes/find-orphan-css-classes.mjs +451 -0
- package/dev-tools/find-orphan-css-classes/orphan-css-classes.config.mjs +44 -0
- package/dev-tools/starter-kit/source_files/app/css/fonts.css +2 -2
- package/dev-tools/starter-kit/source_files/root/__project__.code-workspace +4 -0
- package/dev-tools/starter-kit/source_files/root/_editorconfig +10 -1
- package/dev-tools/starter-kit/source_files/root/_gitignore +1 -0
- package/dev-tools/starter-kit/source_files/root/_sf/controller/UnsplashController.php +2 -1
- package/dev-tools/starter-kit/source_files/root/_sf/symfony-webpack-setup.md +1 -1
- package/dev-tools/starter-kit/source_files/root/_sf/templates/_main-tpl.html.twig +9 -2
- package/dev-tools/starter-kit/source_files/root/_sf/templates/bundles/TwigBundle/Exception/error.html.twig +5 -1
- package/dev-tools/starter-kit/source_files/root/_sf/templates/home.html.twig +17 -0
- package/dev-tools/starter-kit/source_files/root/package-tpl.json +5 -4
- package/dev-tools/starter-kit/source_files/root/webpack-config-modules/custom-props-purgecss-plugin.mjs +30 -6
- package/dev-tools/starter-kit/source_files/root/webpack.config.mjs +140 -58
- package/dev-tools/starter-kit/starter-install.sh +24 -13
- package/dev-tools/starter-kit/webpack-config-upg.md +99 -5
- package/package.json +2 -1
- package/src/components/unsplash-page/unsplash-page.module.css +6 -5
- package/src/minimo.css +3 -6
- package/types/classes.d.ts +0 -525
- package/dev-tools/starter-kit/source_files/app/api/.gitkeep +0 -0
- package/dev-tools/starter-kit/source_files/app/src/components/.gitkeep +0 -0
- package/dev-tools/starter-kit/source_files/app/src/js/.gitkeep +0 -0
- package/dev-tools/starter-kit/source_files/app/src/pagine/.gitkeep +0 -0
- package/dev-tools/starter-kit/source_files/app/src/web-components/.gitkeep +0 -0
- package/src/css/margin-padding-bootstrap-media.css +0 -1845
- package/src/css/margin-padding-bootstrap.css +0 -465
|
@@ -50,14 +50,12 @@ Non servono nuovi pacchetti npm: il plugin usa `postcss` e `glob`, già presenti
|
|
|
50
50
|
}
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
3. **Aggiungere** i nuovi flag e
|
|
53
|
+
3. **Aggiungere** i nuovi flag e la costante derivata (dopo `purgeCSSOptions`):
|
|
54
54
|
|
|
55
55
|
```js
|
|
56
56
|
,useCustomPropsPlugin = true // false: il plugin non viene caricato, le custom properties restano a carico del progetto
|
|
57
57
|
,customPropsFile = path.resolve(__dirname, './app/css/custom-properties.css')
|
|
58
58
|
,purgeCssInDev = false // true (solo per test): purge e plugin attivi anche in dev
|
|
59
|
-
,inlineCssInDev = inlineCssInDevMode && !purgeCssInDev
|
|
60
|
-
,runPurgeCss = usePurgeCss && (!isDevelopment || purgeCssInDev)
|
|
61
59
|
,runCustomPropsPlugin = useCustomPropsPlugin && (!isDevelopment || purgeCssInDev)
|
|
62
60
|
```
|
|
63
61
|
|
|
@@ -81,7 +79,7 @@ Non servono nuovi pacchetti npm: il plugin usa `postcss` e `glob`, già presenti
|
|
|
81
79
|
```
|
|
82
80
|
|
|
83
81
|
6. **`optimization`**: sostituire il commento `// realContentHash: true,` con `realContentHash: !isDevelopment || purgeCssInDev,`.
|
|
84
|
-
7. **PurgeCSS**: la condizione `...(usePurgeCss ? createPurgeCSSPlugins({...}) : [])` diventa `...(
|
|
82
|
+
7. **PurgeCSS**: la condizione `...(usePurgeCss ? createPurgeCSSPlugins({...}) : [])` diventa `...(usePurgeCss && (!isDevelopment || purgeCssInDev) ? ... : [])`, e nella chiamata a `createPurgeCSSPlugins` va **rimosso** il blocco `variablesSafelist: { declarationGlobs, shadowGlobs, seeds }`. I glob `shadowGlobs` e `seeds` si spostano nel plugin (punto seguente, come `extraUsageGlobs` e `seeds`).
|
|
85
83
|
8. **Chunk `shared` anche per i css** (in v2 i css restavano nel css di ogni entry, duplicati). Nel commento e nella funzione `shared_chunk_paths` **rimuovere** la riga `if (module.type === 'css/mini-extract') return false;` (e il vecchio commento/`TODO` che spiegava perché i css restavano fuori dallo `shared`), e nel cacheGroup `shared` (`optimization.splitChunks.cacheGroups`) sostituire `chunks: 'all'` con:
|
|
86
84
|
|
|
87
85
|
```js
|
|
@@ -113,7 +111,7 @@ Non servono nuovi pacchetti npm: il plugin usa `postcss` e `glob`, già presenti
|
|
|
113
111
|
```
|
|
114
112
|
|
|
115
113
|
I `sets` vanno adattati alle entry del progetto: `sources` è l'elenco dei nomi degli asset CSS compilati (con l'hash nel nome, si usa `*`, oppure una RegExp) e `target` (opzionale) l'asset in cui iniettare le definizioni; se omesso è il primo asset del set. Ogni entry con un proprio css deve comparire in un set, altrimenti l'uso di custom properties in quel css non viene rilevato e le definizioni corrispondenti mancano.
|
|
116
|
-
10. **`cssRules`**: passare `inlineCssInDevMode:
|
|
114
|
+
10. **`cssRules`**: passare `inlineCssInDevMode: inlineCssInDevMode && !purgeCssInDev` (non più `inlineCssInDevMode`).
|
|
117
115
|
11. Aggiornare, se presenti, i commenti che citano `variables: true`, `safelist.variables` o `purgecss-variables-safelist.mjs`.
|
|
118
116
|
|
|
119
117
|
### 3. Template
|
|
@@ -149,3 +147,99 @@ Con `HtmlWebpackPlugin` (`inject`) `shared.css` è inserito automaticamente. Se
|
|
|
149
147
|
3. In `build/` esiste `shared.<hash>.css` (con le definizioni delle custom properties), le pagine lo linkano prima del css della entry senza 404, i css delle entry non duplicano gli stili condivisi e la entry `.critical` resta autosufficiente.
|
|
150
148
|
4. `NODE_ENV=development` (con `webpack serve`): le pagine mostrano stili e colori corretti; il master viene caricato per intero come primo modulo delle entry.
|
|
151
149
|
5. Se qualche componente perde stili solo in produzione, provare `useCustomPropsPlugin = false` per isolare il problema.
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
## Da v3 a v3.1
|
|
153
|
+
|
|
154
|
+
Novità della v3.1: il chunk `shared` diventa opzionale (`useSharedChunk`), i `sets` del plugin custom properties sono derivati da `projectEntries` e usano regexp al posto dei wildcard, e il plugin rileva le custom properties dei css `?raw` (web components) nei js dei chunk, per cui `extraUsageGlobs` non serve più per i web components.
|
|
155
|
+
|
|
156
|
+
Riepilogo delle modifiche:
|
|
157
|
+
|
|
158
|
+
| Cosa | Dove |
|
|
159
|
+
|---|---|
|
|
160
|
+
| Flag `useSharedChunk` (chunk `shared` opzionale), `mainEntry`, `standaloneEntries` | `webpack.config.mjs` |
|
|
161
|
+
| `sets` derivati da `projectEntries`, con regexp (`cssAssetRegexp`) al posto dei wildcard | `webpack.config.mjs` |
|
|
162
|
+
| Scansione dei js dei chunk per i css `?raw`; `extraUsageGlobs: []` | `custom-props-purgecss-plugin.mjs`, `webpack.config.mjs` |
|
|
163
|
+
| Riferimenti a `shared.*` / `runtime.js` commentati come opzionali | `_sf/templates/_main-tpl.html.twig`, pagina di errore e template del progetto |
|
|
164
|
+
| `MiniCssExtractPlugin` presente una sola volta; entry `error-pages`; commenti `NB symfony` | `webpack.config.mjs` |
|
|
165
|
+
|
|
166
|
+
### 1. Moduli in `webpack-config-modules/`
|
|
167
|
+
|
|
168
|
+
- **Sostituire** `custom-props-purgecss-plugin.mjs` con la versione v3.1 (`// v.3.1`). Gli altri moduli non cambiano.
|
|
169
|
+
|
|
170
|
+
### 2. Modifiche a `webpack.config.mjs`
|
|
171
|
+
|
|
172
|
+
1. Riga 2: `// v.3` → `// v.3.1`.
|
|
173
|
+
2. **Aggiungere** i flag tra le costanti di configurazione (dopo `customPropsFile`):
|
|
174
|
+
|
|
175
|
+
```js
|
|
176
|
+
,useSharedChunk = true // false: nessun chunk shared né runtime, per progetti con una sola pagina (più al massimo una pagina di errore)
|
|
177
|
+
,mainEntry = 'index' // entry sempre caricata: con useSharedChunk false riceve le definizioni delle custom properties
|
|
178
|
+
,standaloneEntries = [] // con useSharedChunk false: entry non `.critical` che non caricano il css di mainEntry (set proprio)
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
3. **`optimization`**: rendere condizionali `runtimeChunk: 'single'` e `splitChunks.cacheGroups.shared`:
|
|
182
|
+
|
|
183
|
+
```js
|
|
184
|
+
optimization: {
|
|
185
|
+
// ...
|
|
186
|
+
...(useSharedChunk
|
|
187
|
+
? {
|
|
188
|
+
runtimeChunk: 'single',
|
|
189
|
+
splitChunks: { cacheGroups: { shared: { /* come in v3 */ } } }
|
|
190
|
+
}
|
|
191
|
+
: {})
|
|
192
|
+
},
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
4. **Sets del plugin**: prima di `const config`, definire l'helper `cssAssetRegexp` e i set `customPropsSets`, derivati da `projectEntries` (aggiungendo una entry non serve modificare altro):
|
|
196
|
+
|
|
197
|
+
```js
|
|
198
|
+
// corrisponde a `nome.css` (dev con WEBPACK_SERVE) e `nome.<hash>.css`, NON a `nome.critical.<hash>.css`
|
|
199
|
+
const cssAssetRegexp = (entryName) =>
|
|
200
|
+
new RegExp(`^${entryName.replace(/[.+?^${}()|[\]\\]/g, '\\$&')}(\\.[^./]+)?\\.css$`);
|
|
201
|
+
|
|
202
|
+
const cssEntries = Object.keys(projectEntries).filter(name => !/\.critical/.test(name))
|
|
203
|
+
,criticalEntries = Object.keys(projectEntries).filter(name => /\.critical/.test(name))
|
|
204
|
+
,customPropsSets = [
|
|
205
|
+
// i critical css sono inline nei template: restano autosufficienti
|
|
206
|
+
...criticalEntries.map(name => ({ sources: [cssAssetRegexp(name)] })),
|
|
207
|
+
...(useSharedChunk
|
|
208
|
+
// shared.css è linkato in tutte le pagine e contiene le definizioni per tutti i css delle entry
|
|
209
|
+
? [{
|
|
210
|
+
sources: [cssAssetRegexp('shared'), ...cssEntries.map(cssAssetRegexp)],
|
|
211
|
+
target: cssAssetRegexp('shared')
|
|
212
|
+
}]
|
|
213
|
+
// senza shared: definizioni solo nel css di `mainEntry`; le entry che non lo caricano hanno un set proprio
|
|
214
|
+
: [
|
|
215
|
+
{
|
|
216
|
+
sources: cssEntries.filter(name => !standaloneEntries.includes(name)).map(cssAssetRegexp),
|
|
217
|
+
target: cssAssetRegexp(mainEntry)
|
|
218
|
+
},
|
|
219
|
+
...standaloneEntries.map(name => ({ sources: [cssAssetRegexp(name)] }))
|
|
220
|
+
]
|
|
221
|
+
)
|
|
222
|
+
];
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Nel plugin sostituire i `sets` con `sets: customPropsSets`. Si usano RegExp e non i wildcard `*`: `'index.*.css'` non corrisponde a `index.css` (dev con `WEBPACK_SERVE`) e corrisponde invece a `index.critical.<hash>.css`.
|
|
226
|
+
5. **`extraUsageGlobs`**: sostituire i glob dei web components con `extraUsageGlobs: []` (i glob precedenti possono restare commentati). `minimo_path` resta, perché è usato anche nei `contentGlobs` di PurgeCSS.
|
|
227
|
+
|
|
228
|
+
6. **`MiniCssExtractPlugin`**: nell'array `plugins` deve comparire **una sola volta**. Se il config ne contiene due, eliminare quello con `filename: '[name].[contenthash].css'` e tenere quello con la logica `process.env.WEBPACK_SERVE ? '[name].css' : '[name].[contenthash].css'` (e il corrispondente `chunkFilename`).
|
|
229
|
+
7. **Entry `error-pages`**: nel template di base `projectEntries` include `'error-pages': './app/error-pages/error-pages.js'` (pagina di errore, che carica anche il css di `index`). Nei progetti con pagina di errore va aggiunta; non serve altro per i `sets`, perché derivano da `projectEntries`.
|
|
230
|
+
8. **Commenti `NB symfony`** (facoltativo, solo leggibilità): le indicazioni per Symfony (`sf:`, `SYMFONY:`) sono state uniformate in commenti `NB symfony` che dicono cosa commentare, decommentare o rimuovere (import di `HtmlWebpackPlugin` / `HtmlWebpackInjectPreload`, `apiPort`, `output_dir`, `WebpackManifestPlugin`, plugin html). `apiPort` nel template è ora commentato. Nessuna modifica di comportamento.
|
|
231
|
+
|
|
232
|
+
### 3. Template
|
|
233
|
+
|
|
234
|
+
Con `useSharedChunk = false` i template **non** devono referenziare `shared.css`, `shared.js` e `runtime.js` (preload, link e script): nei template di esempio (`_main-tpl.html.twig` e pagina di errore) un commento Twig indica le righe da rimuovere. Le definizioni delle custom properties sono nel css di `mainEntry`, che deve essere linkato in ogni pagina; le entry elencate in `standaloneEntries` hanno invece le proprie definizioni nel loro css. Con `useSharedChunk = true` i template restano invariati.
|
|
235
|
+
|
|
236
|
+
### 4. Cambiamenti di comportamento
|
|
237
|
+
|
|
238
|
+
- **Scansione dei js:** per ogni set il plugin analizza, oltre ai css, i js dei chunk che li contengono (e dei chunk da essi raggiunti). I css importati con `?raw` (shadow DOM dei web components) sono stringhe nel bundle: le loro props entrano nel css solo per i componenti realmente importati. `extraUsageGlobs` va quindi lasciato vuoto salvo css caricati fuori dal bundle: un glob largo (es. `src/web-components/**/*.css` di minimo) porta nel css anche le props di componenti non importati. Una entry solo js, senza css nei `sources`, non viene scansionata.
|
|
239
|
+
- Anche gli usi di `var(--…)` presenti nei js (es. stili generati a runtime) contano come usati.
|
|
240
|
+
|
|
241
|
+
### 5. Verifica dopo l'aggiornamento
|
|
242
|
+
|
|
243
|
+
1. `NODE_ENV=production npx webpack --config ./webpack.config.mjs --stats minimal`: nessun errore o warning del plugin.
|
|
244
|
+
2. Nel css con le definizioni non compaiono props di web components non importati (es. `--jt-*`, `--sdt-*`); per un componente importato con `?raw` le sue props sono presenti.
|
|
245
|
+
3. Con `useSharedChunk = false`: in `build/` non esistono `shared.*` né `runtime.*` e le definizioni sono nel solo css di `mainEntry`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@massimo-cassandro/minimo",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.40.1",
|
|
4
4
|
"description": "Light css framework & utilities",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./index.js",
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"bin": {
|
|
23
23
|
"buildTokens": "dev-tools/design-tokens-builder/build-tokens.mjs",
|
|
24
24
|
"checkUnresolvedProps": "dev-tools/design-tokens-builder/check-unresolved-custom-props.mjs",
|
|
25
|
+
"findOrphanCssClasses": "dev-tools/find-orphan-css-classes/find-orphan-css-classes.mjs",
|
|
25
26
|
"update-version": "dev-tools/update-version/index.mjs",
|
|
26
27
|
"upd@m": "dev-tools/upd@m/index.mjs",
|
|
27
28
|
"svgIconsTools": "dev-tools/svg-icons-tools/index.mjs",
|
|
@@ -32,11 +32,12 @@ custom propeties:
|
|
|
32
32
|
|
|
33
33
|
/* stylelint-disable declaration-no-important */
|
|
34
34
|
|
|
35
|
-
html
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
html.uspg {
|
|
36
|
+
&, & body {
|
|
37
|
+
height: 100%;
|
|
38
|
+
padding: 0;
|
|
39
|
+
margin: 0;
|
|
40
|
+
}
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
*, *::before, *::after {
|
package/src/minimo.css
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/* decomment if you want to use layers. see https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@layer */
|
|
2
2
|
/* @layer reset, base, components, utilities, project, overrides; */
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
@import '@css/fonts.css';
|
|
5
5
|
/* @import '@css/custom-media.css'; */ /* managed by postcss */
|
|
6
|
-
/* @import '@css/custom-properties.css' layer('base'); */ /* managed by postcss-jit-props */
|
|
6
|
+
/* @import '@css/custom-properties.css'; */ /* layer('base'); */ /* comment if managed by postcss-jit-props */
|
|
7
7
|
|
|
8
8
|
@import '@minimoSrc/css/reset.css';
|
|
9
9
|
@import '@minimoSrc/css/layout-base.css';
|
|
@@ -41,10 +41,7 @@
|
|
|
41
41
|
@import '@minimoSrc/css/display.css';
|
|
42
42
|
@import '@minimoSrc/css/margin-padding.css';
|
|
43
43
|
/* @import '@minimoSrc/css/margin-padding-media.css'; responsive version */
|
|
44
|
-
|
|
45
|
-
@import '@minimoSrc/css/margin-padding-bootstrap.css';
|
|
46
|
-
@import '@minimoSrc/css/margin-padding-bootsrap-media.css';
|
|
47
|
-
*/
|
|
44
|
+
|
|
48
45
|
@import '@minimoSrc/css/overflow.css';
|
|
49
46
|
@import '@minimoSrc/css/position.css';
|
|
50
47
|
@import '@minimoSrc/css/visibility.css';
|