1

我正在尝试在ember-cli-imagmin插件中启用 lossyPNG 属性,以为我的 .pngs 创建一个小文件。我在 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 build 时,都会出现以下错误:

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

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

4

1 回答 1

3

ember-cli-imagemin依赖的 broccoli-imagemin 是问题所在。由于它自 2014 年 11 月以来没有更新,它使用的是旧版本的 imagemin,但package.json 规范允许 imagemin v3.x。pngquant 在 imagemin v3.2.0 中作为默认属性被删除。因此,如果您在 package.json 中强制安装 imagemin v3.1.0,它应该可以工作。

如果您想使用更新版本的 imagemin,请查看此 PR。我会尝试直接使用该分支您可以使用以下命令直接从 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')()
    ]
  }
});
于 2017-05-31T02:35:42.953 回答