ember-cli-imagemin lossyPNG ImageMin.pngquant 不是函数

ember-cli-imagemin lossyPNG ImageMin.pngquant is not a function

我正在尝试在 ember-cli-imagmin 插件中启用 lossyPNG 属性 来为我的 .png 创建一个小文件。我在 ember-cli-build.js 中的 EmberApp 包括像这样的 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 构建时,我都会收到以下错误:

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

这个错误将我指向这个 line in broccoli-imagemin。如果我在 ember-cli-build.js 中将 lossyPNG 设置为 false,那么我不会收到任何错误,但我的 png 可以根据 pagespeed 的结果进一步优化。我缺少什么才能使用 pngquant 进一步优化我的 png 图像?

broccoli-imagemin, which ember-cli-imagemin depends upon, is the problem. Since it hasn't been updated since Nov 2014, it uses an older version of imagemin, but the package.json specification allows imagemin v3.x. pngquant was removed as a default property 在 imagemin v3.2.0 中。因此,如果您在 package.json 中强制安装 imagemin v3.1.0,它应该可以工作。

如果您想使用更新版本的 imagemin,请查看 this PR. I'd try to use that branch directly. You can install that branch directly from the repo

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')()
    ]
  }
});