我已经尝试解决这个问题超过半天了。
我有一个angularjs项目,我用grunt来构建。
运行我的grunt
命令会给我以下信息:
```运行"并发: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
谢谢。
显然,png压缩需要libpng-dev
库,我需要使用在构建服务器上安装它
sudo apt-get install libpng-dev
我还更新了我的软件包.json,使用了最新的grunt contrib imagemin("^0.8.0")
运行npm install
和grunt
现在可以在没有错误的情况下工作。
简而言之,我使用的是Fedora
,我的问题由解决
(sudo) yum install optipng
答案很长。
这个问题并不明显,因为错误消息没有说明太多内容。这实际上意味着四个依赖项中的一个或多个丢失了:
gifsicle — Compress GIF images
jpegtran — Compress JPEG images
optipng — Compress PNG images
svgo — Compress SVG images
这些二进制文件依赖于操作系统。
问题解决过程是:
- 再次运行安装以查看未安装的内容:
npm install grunt-contrib-imagemin
- 用谷歌搜索失败的组件,看看如何将其安装在操作系统中。安装所有缺失的。(好吧,如果我应该重复步骤1,我得到了同样的失败消息,所以对我来说没有帮助)
- 然后再次尝试运行imagemin任务。祝你好运
imagemin使用grunt serve:dist
-模式时出错。
请尝试以下操作。
npm uninstall
rm -rf node_modules
npm cache clean
npm install
正如imagemin的作者/@kevva对grunt-contrib-imagemin
上的GitHub问题所评论的那样,问题是将mozjpeg
和其他依赖项更新到当前版本的PR尚未发布。
您使用的是不受支持的imagemin-mozjpeg版本(grunt contrib imagemin还不支持基于流的插件)。试试这个
npm install imagemin-mozjpeg@1
是的,它们和imagemin配合得很好。但是grunt-contrib-imagemin还没有将imagemin依赖项更新到2.0.0(昨天在04b8c10中刚刚合并),所以它使用了一个旧的API。