La commande grunt imagemin
affiche les éléments suivants dans un fichier aléatoire.
Fatal error: ENOENT, no such file or directory 'app/public/assets/img/epg/recordseries.png'
Ce qui est amusant, c’est que chaque fois que j’exécute à nouveau la commande grunt imagemin, elle parvient à traiter quelques fichiers de plus et termine en générant la même erreur à propos d’un autre fichier.
J'utilise
node v0.10.24
npm 1.3.21
[email protected]
[email protected] node_modules/grunt-contrib-imagemin
+-- [email protected]
+-- [email protected]
+-- [email protected] ([email protected], [email protected], [email protected])
+-- [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
Voici ma configuration de grunt pour la tâche imagemin
:
grunt.config('imagemin', {
options: {
optimizationLevel: 3, // 0 to 7, default =7)
// pngquant: true
},
dynamic: { // Multiple target
files: [{
expand: true, // Enable dynamic expansion
cwd: '<%= context.source %>/assets/img/', // equal to app/wesource/assets/img/
src: ['!**/*-'+arrayToRegexStr(platformIgnoreList)+'**', '**/*.{png,jpg,jpeg,gif}'], // Actual patterns to match //
dest: '<%= context.public %>/assets/img/' // equal to app/public/assets/img/
}]
}
});
La désinstallation de la version 0.5.0 et le retour à la version 0.3.0 avec les commandes suivantes devraient restaurer la fonctionnalité précédente:
npm uninstall grunt-contrib-imagemin
npm install --save-dev [email protected]
Il existe un problème, https://github.com/gruntjs/grunt-contrib-imagemin/issues/140 , qui est en cours de traitement et qui, une fois résolu, devrait pouvoir être mis à niveau en toute sécurité.
Les solutions suivantes fonctionnent sur ...
Il s’agit là d’une solution simple, mais j’ai constaté que la tâche échouait lorsqu’elle examinait le répertoire cible pour voir si l’image PNG existait déjà et était optimisée. La tâche se terminait systématiquement lorsque je l'exécutais encore et encore, chaque fois qu'elle complétait quelques images supplémentaires. Et je pourrais répéter le problème en exécutant grunt clean
, puis grunt imagemin
encore et encore.
L'erreur que j'ai vue était:
bash
Fatal error: ENOENT, no such file or directory 'build-production/path-to/some-image.png'
Copiez les images dans le répertoire cible immédiatement avant de les optimiser. De cette façon, les vérifications réussies et les images non optimisées copiées sont remplacées par leur équivalent optimisé.
grunt.task.run(
'copy:imagemin',
'imagemin'
);
copy: {
imagemin: {
files: [{
expand: true,
cwd: '<%= exponential.client.src %>',
src: ['images/**/*.{png,jpg,gif}'],
dest: '<%= exponential.client.buildProduction %>'
}]
}
}
imagemin: {
buildProduction: {
files: [{
expand: true,
cwd: '<%= exponential.client.src %>',
src: ['images/**/*.{png,jpg,gif}'],
dest: '<%= exponential.client.buildProduction %>'
}]
}
}
J'ai pu résoudre le problème en désinstallant optipng
que j'avais installé accidentellement à l'échelle du système.
Essayez d’utiliser cache: false
a travaillé pour moi.
J'ai eu le même problème avec grunt-contrib-imagemin et c'était parce que je courais avec Grunt avec Sudo.
Ma solution était de faire un chown et un chmod sur toute la structure puis de grogner sans Sudo ...
ce qui a fonctionné pour moi, c’est une installation propre des modules de nœud . Je supprime le répertoire node_modules et npm install après que cela fonctionne à nouveau pour moi.