2016-04-29 132 views
7

我在我的機器上安裝了一個Gulp項目。當運行Gulp Watch時,如果向文件夾添加新映像,我的gulp-imagemin會崩潰該進程。我在該文件夾上正確設置了所有權限(多次檢查),並且圖像也具有正確的權限。gulp-imagemin錯誤:optipng:無法執行二進制文件

過程引發以下錯誤:

Error: Command failed: /Users/robbert/Sites/wordpress_cyklo/node_modules/gulp-imagemin/node_modules/imagemin/node_modules/imagemin-optipng/node_modules/optipng-bin/vendor/optipng -strip all -clobber -force -fix -o 2 -out /var/folders/kj/wydtr_t92hqgymv2d2v43pjw0000gr/T/9ab534f4-267f-46cb-b99f-372028e6ed5b /var/folders/kj/wydtr_t92hqgymv2d2v43pjw0000gr/T/eabb0414-f9db-4b6f-8242-4c8d25004e1d /Users/robbert/Sites/wordpress_cyklo/node_modules/gulp-imagemin/node_modules/imagemin/node_modules/imagemin-optipng/node_modules/optipng-bin/vendor/optipng: /Users/robbert/Sites/wordpress_cyklo/node_modules/gulp-imagemin/node_modules/imagemin/node_modules/imagemin-optipng/node_modules/optipng-bin/vendor/optipng: cannot execute binary file

每當我的文件夾上運行咕嘟咕嘟,我得到了同樣的錯誤,除非我通過我的流浪VM上運行它。我該如何解決?我的虛擬機速度要慢很多,所以我真的希望能夠在我的主操作系統上運行Gulp。

編輯:下面是圖片吞氣:

// ### Images 
// `gulp images` - Run lossless compression on all the images. 
gulp.task('images', function() { 
    return gulp.src(globs.images) 
    .pipe(imagemin({ 
     progressive: true, 
     interlaced: true, 
     svgoPlugins: [{removeUnknownsAndDefaults: false}, {cleanupIDs: false}] 
    })) 
    .pipe(gulp.dest(path.dist + 'images')) 
    .pipe(browserSync.stream()); 
}); 
+0

你可以發表你的gulpfile或者至少確切手錶電話嗎? thx – rick

+0

@rick我不是那麼熟悉吞嚥,但我想我現在已經將它添加到了問題中。 – Rvervuurt

+0

它似乎是一個在mac osx上的已知問題https://github.com/imagemin/optipng-bin/issues/37不知道這是否可以幫助你 – rick

回答

7

gulp-imagemin依靠optipng優化PNG圖像。 optipng是一個用C編寫的本地程序,而不是JavaScript。這意味着當你爲你的系統架構安裝了的合適的可執行文件時,你可以使用npm install gulp-imagemin

如果一個系統上運行npm install gulp-imagemin(例如Linux)的,然後複製整個項目包括node_modules文件夾到另一個系統(例如MacOS X系統),該optipng執行仍將是一個用於Linux。 MacOS X無法運行Linux可執行文件。

即使您未明確複製項目,但意外地將node_modules文件夾提交到存儲庫中,也可能會發生同樣的問題。

你最好的選擇就是刪除從無到有整個node_modules文件夾和npm install

rm -rf node_modules 
npm install 
相關問題