ember-cli-imagemin lossyPNG ImageMin.pngquant не является функцией

Я пытаюсь включить свойство lossyPNG в аддоне ember-cli-imagmin для создайте файл небольшого размера для моего .png. Мой EmberApp в ember-cli-build.js включает в себя imagemin следующим образом:

imagemin: {
  interlaced: true,
  optimizationLevel: 3,
  progressive: true,
  lossyPNG: true,
  pngquant: {
    speed: 1,
    quality: 80
  }
}

Объект зависимостей в моем package.json включает:

{ ...
  "ember-cli-imagemin": "0.4.0",
  "imagemin": "3.2.2",
  "imagemin-pngquant": "4.2.2",
  ...
}

Однако всякий раз, когда я запускаю ember build, я получаю следующую ошибку:

The Broccoli Plugin: [object Object] failed with:
TypeError: ImageMin.pngquant is not a function

Эта ошибка указывает мне на эту строку в broccoli-imagemin. Если я установлю для lossyPNG значение false в файле ember-cli-build.js, я не получу никакой ошибки, но мои PNG можно будет дополнительно оптимизировать на основе результатов pagespeed. Чего мне не хватает, чтобы иметь возможность использовать pngquant для дальнейшей оптимизации моих PNG-изображений?


person wwwuser    schedule 26.05.2017    source источник


Ответы (1)


broccoli-imagemin, который ember-cli-imagemin зависит от того, в чем проблема. Поскольку он не обновлялся с ноября 2014 года, он использует более старую версию imagemin, но спецификация package.json позволяет использовать imagemin v3.x. pngquant был удален как свойство по умолчанию в imagemin v3.2.0. Поэтому, если вы принудительно установите imagemin v3.1.0 в свой package.json, это должно сработать.

Если вы хотите использовать более новую версию imagemin, посмотрите этот PR< /а>. Я бы попытался использовать эту ветку напрямую. Вы можете установить эту ветку прямо из репозитория с:

ember install https://github.com/kanongil/ember-cli-imagemin.git#v5-imagemin

Эта ветка меняет принцип работы imagemin. Вместо того, чтобы передавать параметры, похоже, что вы просто передаете плагины, которые хотите использовать, и передаете их параметры непосредственно им.

var app = new EmberApp({
  imagemin: {
    plugins: [
      require('imagemin-jpegtran')({ progressive: true }),
      require('imagemin-pngquant')({speed: 1, quality: 80}),
      require('imagemin-svgo')()
    ]
  }
});
person RustyToms    schedule 31.05.2017