Gulp在gulp.src()中使用符号链接时出错。

7

我在我的images文件夹中有一个符号链接,它指向另一个包含第三方库提供的外部图像的文件夹(由bower管理-必须喜欢javascript)。作为我构建过程的一部分,我按照以下方式压缩所有图像:

gulp.task('images', function() {
return gulp.src('static/img/**/*')
    .pipe(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true }))
    .pipe(gulp.dest('dist/img'))
});

当gulp到达img文件夹中的符号链接文件夹时,它会返回。
events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: EISDIR, read

使用gulp-debug显示它在符号链接文件夹上失效。我使用的是Mac OSX,符号链接是使用ln -s创建的。有什么想法吗?

你尝试过使用实际的文件/文件夹而不是符号链接吗?只是为了验证符号链接是否确实是问题所在。EISDIR错误让我想到gulp正在尝试使用目录作为其src,而不是该目录中的文件。 - donnywals
当它是一个文件夹时,它可以正常工作。我已经将其用作临时解决方案。 - rstuart85
我正在使用JSPM本地链接工作时遇到相同的问题... - ryanlutgen
3个回答

7

gulp.src()使用node-glob,它不会遍历符号链接:

**如果在路径部分中只有一个“globstar”,则它匹配零个或多个目录和子目录以搜索匹配项。它不会遍历符号链接的目录。

请注意,符号链接的目录不会作为**的一部分被遍历,尽管它们的内容可能与模式的后续部分匹配。这可以防止无限循环、重复等问题。

我不知道它是否应该报错或者只是跳过它们。


4

当我指向一个符号链接文件夹时,我遇到了同样的问题。

解决方案很简单,只需使用vinyl-fs包即可。

var vfs = require('vinyl-fs');

gulp.task('myTask', [], function() {
  vfs.src('static/img/**/*')
  .pipe(vfs.dest('dist/img'))
)};

2
您可以使用选项 'follow: true' 来让 Gulp 跟随符号链接。例如:
gulp.src('static/img/**/*', { follow: true })

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