5

我已经尝试解决这个问题超过半天了。

我有一个使用 grunt 构建的 angularjs 项目。

运行我的grunt命令给我以下信息:

``` 运行“concurrent:dist”(并发)任务

Running "svgmin:dist" (svgmin) task
Total saved: 0 B

Done, without errors.


Execution Time (2014-09-23 21:53:55 UTC)
loading tasks   7ms  ▇▇▇▇▇▇ 11%
svgmin:dist    58ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 89%
Total 65ms
    Warning: Running "imagemin:dist" (imagemin) task
Fatal error: Object #<DestroyableTransform> has no method 'apply'


Execution Time (2014-09-23 21:53:55 UTC)
imagemin:dist  868ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 99%
Total 876ms Use --force to continue.

    Aborted due to warnings.

```

这是我在 GruntFile.js 中的 imagemin 任务:

imagemin: { dist: { files: [ { expand: true, cwd: '<%= yeoman.app %>/images', src: '{,*/}*.{png,jpg,jpeg,gif}', dest: '<%= yeoman.dist %>/images' } ] } }

我在互联网上找不到任何对我有帮助的东西。我确实发现了这个未解决的问题,但到目前为止还没有人回应:https ://github.com/gruntjs/grunt-contrib-imagemin/issues/254

谢谢。

4

4 回答 4

6

显然,png压缩需要该libpng-dev库,我需要使用以下命令将其安装在我的构建服务器上:

sudo apt-get install libpng-dev

我还更新了我的 package.json 以使用最新的 grunt-contrib-imagemin ("^0.8.0")

正在运行npm installgrunt现在可以正常工作,没有错误。

于 2014-09-23T22:46:32.840 回答
2

简而言之,我正在使用Fedora并且我的问题通过以下方式解决:

(sudo) yum install optipng

这是长答案。

这个问题并不明显,因为错误消息并没有说明太多。这实际上意味着缺少四个依赖项中的一个或多个:

gifsicle — Compress GIF images
jpegtran — Compress JPEG images
optipng — Compress PNG images
svgo — Compress SVG images

这些二进制文件依赖于操作系统。

解决问题的过程是:

  1. 再次运行安装以查看未安装的内容:npm install grunt-contrib-imagemin
  2. 谷歌失败的组件,看看如何在你的操作系统中安装它。安装所有缺少的。(好吧,如果我应该重复第 1 步,我会收到相同的失败消息,所以对我来说没有帮助)
  3. 然后尝试再次运行 imagemin 任务。手指交叉。
于 2014-10-22T14:29:46.897 回答
2

使用grunt serve:dist-mode导致的imagemin错误。

请尝试以下操作。

  1. npm uninstall
  2. rm -rf node_modules
  3. npm cache clean
  4. npm install
于 2015-12-17T04:40:05.543 回答
1

正如 imagemin 的作者/@kevva在 GitHub上评论的那样grunt-contrib-imagemin,问题是要更新的 PRmozjpeg和当前版本的其他依赖项尚未出现。

您正在使用不受支持的 imagemin-mozjpeg 版本(grunt-contrib-imagemin 还不支持基于流的插件)。尝试这个npm install imagemin-mozjpeg@1

...

是的,它们与 imagemin 一起工作得很好。但是 grunt-contrib-imagemin 还没有将 imagemin 依赖更新到 2.0.0(昨天刚刚在 04b8c10 中合并),所以它使用了旧的 API。

于 2014-10-22T15:58:03.190 回答