CLI TypeScript pour optimiser, convertir et générer des images web prêtes pour la production.
- Conversion vers
webp,avif,jpegetpngavec Sharp. - Scan des images
png,jpg,jpeg,tiff,webpetavif. - Conversion multi-formats en une commande:
--format webp,avif. - Redimensionnement simple avec
--resizeet plafond avec--max-width. - Variantes responsive
@1x,@2x,@3xavec--responsive. - Dossier de sortie configurable avec conservation de l'arborescence depuis
--input. - Protection contre l'ecrasement du fichier source.
- Les sorties generees ne sont pas rescanees comme entrees.
- Metadata EXIF strippees par defaut, avec option
--keep-metadata. - Cache
.webimg-cache.jsoninvalide quand le fichier source ou les options changent. - Mode
--watchpour relancer la conversion pendant le developpement. - Rapport console, JSON ou Markdown.
- Suppression sûre avec backup optionnel et nettoyage des sorties orphelines.
- Limite de concurrence configurable.
- API programmatique utilisable dans un script Node.js.
- Node.js
>=18 - npm
>=9recommande
Verifier la version locale:
node -v
npm -vInstallation globale:
npm install -g @eltkof7/webimg-cli
webimg --versionUtilisation sans installation globale:
npx @eltkof7/webimg-cli --version
npx @eltkof7/webimg-cli scan -rInstallation dans un projet:
npm install -D @eltkof7/webimg-cli
npx webimg scan -rExemple de scripts npm:
{
"scripts": {
"img:scan": "webimg scan -i ./src/assets -r",
"img:build": "webimg run -i ./src/assets -o ./public/img -f webp,avif -q 80 -r",
"img:watch": "webimg run -i ./src/assets -o ./public/img -f webp --watch -r"
}
}Mode interactif:
webimgCreer une configuration par defaut:
webimg initScanner le dossier courant:
webimg scan
webimg scan -rScanner un dossier precis:
webimg scan -i ./src/assets -rConvertir en WebP dans le meme dossier:
webimg run -f webp -q 80 -rConvertir vers WebP et AVIF dans un dossier public:
webimg run -i ./src/assets -o ./public/img -f webp,avif -q 80 -rGenerer des variantes responsive:
webimg run -i ./src/assets -o ./public/img -f webp,avif --resize 800 --responsive 1,2,3 -rTester sans ecrire de fichiers:
webimg run -i ./src/assets -f avif --dry-run --report report.md -rSurveiller les changements:
webimg run -i ./src/assets -o ./public/img -f webp --watch -rLance le mode interactif. Le CLI pose quelques questions, scanne les images, puis lance la conversion.
webimgCree webimg.config.json dans le dossier courant.
webimg initScanne les images et affiche un resume par extension.
webimg scan -i ./src/assets -rOptions utiles:
webimg scan --include "images/**/*.{png,jpg}" --exclude "**/*.raw.png"Execute la conversion sans question interactive. C'est la commande a utiliser en CI/CD ou dans les scripts npm.
webimg run -i ./src/assets -o ./public/img -f webp,avif -q 80 -r| Option | Description | Defaut |
|---|---|---|
-i, --input <dir> |
Dossier a scanner | . |
-f, --format <types> |
Formats de sortie separes par virgule: webp,avif,jpeg,png |
webp |
-q, --quality <n> |
Qualite de sortie entre 1 et 100 |
80 |
-r, --recursive |
Inclut les sous-dossiers | false |
-o, --output <dir> |
Dossier de sortie | dossier source |
-s, --suffix <str> |
Suffixe ajoute au nom de fichier | vide |
--resize <w> |
Largeur cible en pixels pour la sortie 1x | aucun |
--max-width <px> |
Largeur maximale, sans agrandir les petites images | aucun |
--responsive <list> |
Densites a generer, par exemple 1,2,3 |
aucune |
--keep-metadata |
Conserve les metadata EXIF/IPTC/XMP | false |
--replace |
Supprime le fichier source apres conversion reussie | false |
--supp-ref |
Supprime les images sources scannees apres conversion reussie ou sortie deja existante | false |
--backup |
Sauvegarde la source avant suppression | false |
--backup-dir <dir> |
Dossier de backup (conserve l'arborescence) | .webimg-backup |
--clean |
Supprime les sorties generees orphelines | false |
--concurrency <n> |
Nombre maximal de conversions simultanees, 0 = automatique |
0 |
--dry-run |
Simule la conversion sans ecrire de fichiers | false |
--no-cache |
Desactive le cache .webimg-cache.json |
cache actif |
--include <patterns> |
Patterns glob a inclure, separes par virgule | auto |
--exclude <patterns> |
Patterns glob a exclure, separes par virgule | vide |
--report <path> |
Ecrit un rapport .json ou .md |
aucun |
--watch |
Surveille les changements et reconvertit | false |
webimg run -i ./src/assets -o ./public/img -f webp --replace --backup --backup-dir ./backups -rLa source n'est supprimee qu'apres conversion complete et copie reussie dans le backup. En cas d'erreur, elle est conservee.
webimg run -i ./src/assets -o ./public/img -f webp --clean -r--clean ne supprime que les fichiers de formats declares qui correspondent a des sorties generees et ne sont plus planifies.
webimg run -i ./src/assets -o ./public/img -f webp,avif -q 78 -rSi src/assets/products/shoe.png existe, les sorties seront:
public/img/products/shoe.webp
public/img/products/shoe.avif
webimg run -i ./images -f webp -s .min -rSortie exemple:
images/photo.min.webp
webimg run -i ./images -o ./public/img -f webp --resize 1200 -rLes images plus petites que 1200px ne sont pas agrandies.
webimg run -i ./images -o ./public/img -f webp --resize 640 --responsive 1,2,3 -rSorties exemple:
public/img/[email protected] # 640px
public/img/[email protected] # 1280px
public/img/[email protected] # 1920px
webimg run -i ./images -o ./public/img -f avif --resize 1600 --max-width 1200 -rwebimg run -i ./images -o ./public/img -f webp,avif --report report.json -r
webimg run -i ./images -o ./public/img -f webp,avif --report report.md -rwebimg run --include "src/**/*.{png,jpg}" --exclude "**/*.icon.png,**/raw/**" -f webpwebimg run -i ./images -f webp --replace -rUtiliser --replace seulement si les sources peuvent etre supprimees. Le CLI refuse d'ecrire une sortie sur le meme chemin que le fichier source; utilisez --output ou --suffix si necessaire.
Creer le fichier:
webimg initExemple webimg.config.json:
{
"input": "./src/assets",
"output": "./public/img",
"recursive": true,
"formats": ["webp", "avif"],
"quality": 80,
"resize": 1200,
"maxWidth": null,
"responsive": [1, 2],
"suffix": "",
"keepMetadata": false,
"keepOriginal": true,
"include": [],
"exclude": ["**/node_modules/**", "**/dist/**"],
"cache": true,
"dryRun": false
}Les options passees en ligne de commande surchargent la configuration du fichier.
Fichiers de configuration supportes:
webimg.config.json
.webimgrc.json
.webimgrc
Le cache est stocke dans .webimg-cache.json.
Une conversion est reutilisee seulement si:
- le fichier source n'a pas change;
- les sorties attendues existent;
- les options de conversion importantes sont identiques: formats, qualite, resize, max-width, responsive, suffixe et metadata.
Desactiver le cache:
webimg run -i ./images -f webp --no-cache -rPar defaut, les metadata EXIF/IPTC/XMP sont retirees.
Conserver les metadata:
webimg run -i ./images -f webp --keep-metadata -rimport { findImages, mergeConfig, runParallel, summarize } from '@eltkof7/webimg-cli';
const cwd = process.cwd();
const cfg = mergeConfig({
input: './src/assets',
output: './public/img',
recursive: true,
formats: ['webp', 'avif'],
quality: 80,
resize: 1200,
});
const files = await findImages(cwd, cfg);
const results = await runParallel(files, cfg, cwd);
const summary = summarize(results);
console.log(summary);Exports disponibles:
export { convertFile, runParallel } from '@eltkof7/webimg-cli';
export { findImages, SUPPORTED_INPUT } from '@eltkof7/webimg-cli';
export { loadConfig, mergeConfig, DEFAULT_CONFIG } from '@eltkof7/webimg-cli';
export { summarize, printReport, writeJsonReport, writeMarkdownReport, formatBytes } from '@eltkof7/webimg-cli';
export { ConversionCache } from '@eltkof7/webimg-cli';Cloner le depot:
git clone https://github.com/REBCDR07/webimg-cli.git
cd webimg-cliInstaller les dependances:
npm installLancer les controles:
npm run lint
npm run typecheck
npm test
npm run build
npm auditTester le binaire local:
npm run build
node dist/index.js --version
node dist/index.js scan -rTester globalement avec npm link:
npm link
webimg --version
webimg scan -rVerifier le contenu du package npm:
npm pack --dry-runVerifier l'authentification:
npm whoamiPublier une nouvelle version:
npm version patch
git push --follow-tags
npm publish --access publicPour une premiere publication du package scope public:
npm publish --access publicLe hook prepublishOnly lance automatiquement:
npm run lint
npm run typecheck
npm test
npm run buildLe workflow GitHub Actions execute lint, typecheck, tests et build sur Node 18, 20 et 22.
La publication automatique peut etre faite depuis une release GitHub avec un secret NPM_TOKEN configure dans les settings du depot.
MIT © eltkof7