diff --git a/test/construction.long.test.js b/test/construction.long.test.js index 5f712bf..6e57c06 100644 --- a/test/construction.long.test.js +++ b/test/construction.long.test.js @@ -16,7 +16,7 @@ import assert from 'node:assert/strict'; import { mkdtempSync, readdirSync, readFileSync, rmSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { extname, join, relative, resolve, sep } from 'node:path'; -import { fileURLToPath } from 'node:url'; +import { fileURLToPath, pathToFileURL } from 'node:url'; import { build } from 'vite'; import { describe, test } from './lanceur.js'; @@ -315,6 +315,22 @@ describe('construction', () => { ); assert.deepEqual(modules.filter(moduleDEpreuve), []); + // La taille de chaque morceau tient sous le seuil d'avertissement de + // vite.config.js, en kilooctets de 1 000 octets comme Vite les compte : + // un paquet qui grossit au-delà fait tomber cette épreuve, et non + // seulement avertir la construction. + const { default: vite } = await import(pathToFileURL(join(RACINE, 'vite.config.js')).href); + const seuil = vite.build?.chunkSizeWarningLimit; + assert.equal(typeof seuil, 'number', 'vite.config.js ne pose aucun build.chunkSizeWarningLimit'); + const morceaux = sorties.filter((s) => s.type === 'chunk'); + assert.ok(morceaux.length > 0, `aucun morceau parmi ${sorties.length} sorties`); + assert.deepEqual( + morceaux + .filter((m) => Buffer.byteLength(m.code, 'utf8') > seuil * 1000) + .map((m) => `${m.fileName} : ${Math.ceil(Buffer.byteLength(m.code, 'utf8') / 1000)} ko > ${seuil} ko`), + [], + ); + // Un actif n'est pas un module : moduleIds ne le voit pas. Une donnée // jointe par new URL(…, import.meta.url) n'apparaît que là. const actifs = sorties diff --git a/vite.config.js b/vite.config.js index 372a00b..ae200cd 100644 --- a/vite.config.js +++ b/vite.config.js @@ -5,6 +5,12 @@ // Electron. La base relative fait commencer chaque chemin d'actif par « ./ » : // la coquille charge la page par file://, où un chemin absolu « /assets/… » // désigne la racine du disque. +// +// Le seuil d'avertissement d'un morceau vaut 1 000 ko, et non les 500 ko de +// Vite : la page se lit sur le disque local, hors ligne, une fois au +// lancement, et un seul morceau porte l'application entière, travailleur de +// génération incrusté compris. Le seuil n'avertit donc que d'une croissance +// anormale du paquet ; test/construction.long.test.js tombe au-delà. import { defineConfig } from 'vite'; import { svelte } from '@sveltejs/vite-plugin-svelte'; @@ -14,5 +20,6 @@ export default defineConfig({ build: { outDir: 'www', emptyOutDir: true, + chunkSizeWarningLimit: 1000, }, });