2016-04-29 444 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