Выход grunt-contrib-imagemin "Неустранимая ошибка: ENOENT, нет такого файла или каталога"

Команда grunt imagemin выводит следующее в случайный файл.

Fatal error: ENOENT, no such file or directory 'app/public/assets/img/epg/recordseries.png'

Что смешно в том, что каждый раз, когда я снова запускаю команду grunt imagemin, ей удается обработать еще несколько файлов и заканчивать их выдачей одной и той же ошибки о другом файле.

Я использую

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])

Вот моя конфигурация grunt для задачи 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/
        }]
    }
});

Ответы

Ответ 1

Удаление версии 0.5.0 и возврат к версии 0.3.0 со следующими командами должны восстановить предыдущую функциональность:

npm uninstall grunt-contrib-imagemin

npm install --save-dev [email protected]

Возникает проблема https://github.com/gruntjs/grunt-contrib-imagemin/issues/140, которая обрабатывается, и когда она исправлена, она должна быть безопасной для обновления.

Ответ 2

Следующие решения работают на...

  • Ubuntu Linux 13.10 x64
  • npm --version = 1.3.11
  • node --version = v0.10.21
  • grunt-contrib-imagemin = 0.5.0

Это взломать решение, но я обнаружил, что задача завершилась неудачно, когда она смотрит на целевой каталог, чтобы увидеть, что изображение PNG уже существует и оптимизировано. Задача будет последовательно завершаться, когда я буду запускать ее снова и снова, каждый раз, когда она завершит еще несколько изображений. И я мог бы повторить проблему, запустив grunt clean, затем grunt imagemin снова и снова.

Я видел ошибку:

bash Fatal error: ENOENT, no such file or directory 'build-production/path-to/some-image.png'

Решение

Скопируйте изображения в целевой каталог непосредственно перед их оптимизацией. Таким образом, пропуски проверки и неоптимизированные изображения, которые копируются, заменяются их оптимизированным эквивалентом.

Задача

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

imagemin: {
    buildProduction: {
        files: [{
            expand: true,
            cwd: '<%= exponential.client.src %>',
            src: ['images/**/*.{png,jpg,gif}'],
            dest: '<%= exponential.client.buildProduction %>'
        }]
    }
}

Ответ 3

Попробуйте использовать cache: false

работал у меня.

Ответ 4

Мне удалось решить проблему, удалив optipng, который я случайно установил в системе.

Ответ 5

У меня была такая же проблема с grunt-contrib-imagemin, и это было потому, что я бегала с sudo.

Мое решение состояло в том, чтобы сделать chown и chmod на всей структуре, а затем запустить grunt без sudo...

Ответ 6

для меня работала чистая установка модулей node Я удаляю директорию node_modules и установил npm после этого он снова работал у меня