gulp-imagemin错误:optipng:无法执行二进制文件。

15
我正在使用安装了Gulp的机器运行项目。当运行Gulp Watch时,如果我在文件夹中添加新图像,我的gulp-imagemin会使进程崩溃。我已经正确设置了该文件夹的所有权限(多次检查),并且图像也具有正确的权限。
该进程抛出以下错误:
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 每当我在该文件夹上运行Gulp时,我都会得到相同的错误,除非我通过Vagrant VM运行它。如何解决这个问题?我的VM要慢得多,因此我真的想能够在我的主操作系统上运行Gulp。
编辑:以下是用于图像的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());
});

你能发布你的gulpfile或者至少是确切的watch调用吗?谢谢。 - rick
@rick,我对gulp不是很熟悉,但我认为我已经将它添加到问题中了。 - Rvervuurt
似乎这是Mac OSX上已知的问题 https://github.com/imagemin/optipng-bin/issues/37 不知道这是否能帮到你。 - rick
1个回答

18

gulp-imagemin 依赖于 optipng 来优化 PNG 图像。 optipng 是用 C 编写的本地程序,而不是 JavaScript。这意味着当您运行 npm install gulp-imagemin 时,适用于您系统架构的 optipng 可执行文件将被安装。

如果您在一个系统上运行 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接