2014-09-23 106 views
5

我一直試圖解決這個問題超過半天。imagemin:dist任務投擲錯誤

我有一個使用grunt構建的angularjs項目。

運行我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. 

```

這裏是我的imagemin任務我的GruntFile.js:

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

謝謝。

回答

6

顯然,PNG壓縮需要libpng-dev庫,我需要安裝我的生成服務器上使用:

sudo apt-get install libpng-dev

我也更新了我的package.json使用最新的咕嚕-的contrib-imagemin( 「^ 0.8.0」)

正在運行npm installgrunt現在無法正常工作。

2

總之,我使用Fedora和我的問題被解決:

(sudo) yum install optipng 

這裏是長答案。

此問題是not obvious,因爲錯誤消息沒有多大意義。它實際上意味着缺少一個或多個四個依賴關係:

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任務。手指交叉。
1

由於imagemin commented on a GitHub issuegrunt-contrib-imagemin撰文/ @ kevva,問題是,PR更新mozjpeg和其他依賴於當前版本尚未英寸

您正在使用不受支持的imagemin-mozjpeg版本(grunt-contrib-imagemin不支持基於流的插件)。試試這個npm install [email protected]

...

是的,他們的工作只是罰款與imagemin。但grunt-contrib-imagemin沒有將imagemin依賴更新到2.0.0(剛剛在04b8c10中合併),所以它使用了一個較老的API。

1

imagemin錯誤通過使用grunt serve:dist模式。

請嘗試以下內容。

  1. npm uninstall
  2. rm -rf node_modules
  3. npm cache clean
  4. npm install