没有指定路径!不能得到亲戚。 gulp 任务中的乙烯基-fs 错误

Posted

技术标签:

【中文标题】没有指定路径!不能得到亲戚。 gulp 任务中的乙烯基-fs 错误【英文标题】:No path specified! Can not get relative. vinyl-fs error in gulp task 【发布时间】:2016-12-24 16:09:18 【问题描述】:

我在尝试使用 gulp 脚本构建我的应用程序时突然收到此错误,该脚本的“图像”任务因此错误而失败:

node_modules\vinyl index.js:153

if (!this.path) throw new Error('未指定路径!无法获取相对路径。');

知道为什么会发生这种情况吗?我确实将这些文件移动到具有不同名称的新文件夹中,但我使用新文件夹名称更新了 bower.json 和 package.json 文件。

// Generated on 2016-03-15 using generator-angular 0.15.1
'use strict';

var gulp = require('gulp');
var $ = require('gulp-load-plugins')();
var openURL = require('open');
var lazypipe = require('lazypipe');
var rimraf = require('rimraf');
var wiredep = require('wiredep').stream;
var runSequence = require('run-sequence');

var config = 
bowerDir: './bower_components'


//app directory structor
var yeoman = 
    app: require('./bower.json').appPath || 'app',
    dist: 'dist',
    temp: '.tmp',
    test: 'test'
;

// for sources
var paths = 
    scripts: [yeoman.app + '/scripts/**/*.js'],
    styles: [yeoman.app + '/styles/**/*.scss'],
    test: ['test/spec/**/*.js'],
    testRequire: [
      'bower_components/angular/angular.js',
      'bower_components/angular-mocks/angular-mocks.js',
      'bower_components/angular-resource/angular-resource.js',
      'bower_components/angular-cookies/angular-cookies.js',
      'bower_components/angular-sanitize/angular-sanitize.js',
      'bower_components/angular-route/angular-route.js',
      'bower_components/angular-animate/angular-animate.js',
      'bower_components/angular-touch/angular-touch.js',
      'bower_components/angular-ui-sortable/sortable.js',
      'bower_components/angular-local-storage/dist/angular-local-storage.js',
      'test/mock/**/*.js',
      'test/spec/**/*.js'
    ],
    karma: yeoman.test + '/karma.conf.js',
    views: 
        main: yeoman.app + '/index.html',
        bowermain: yeoman.temp + '/index.html',
        files: [yeoman.app + '/views/**/*.html']
    
;

////////////////////////
// Reusable pipelines //
////////////////////////

var lintScripts = lazypipe()
  .pipe($.jshint) // '.jshintrc'
  .pipe($.jshint.reporter, 'jshint-stylish');

var styles = lazypipe()
  .pipe($.sass, 
      outputStyle: 'expanded',
      precision: 10
  )
  .pipe($.autoprefixer, 
      browsers: ['last 2 version']
  )
  .pipe(gulp.dest, yeoman.temp + '/styles');

///////////
// Tasks //
///////////

gulp.task('styles', function () 
    return gulp.src(paths.styles)
      .pipe(styles());
);

gulp.task('lint:scripts', function () 
    return gulp.src(paths.scripts)
      .pipe(lintScripts());
);

gulp.task('clean:tmp', function (cb) 
    rimraf(yeoman.temp, cb);
);

gulp.task('start:client', ['start:server', 'styles', 'lint:scripts'], function () 
    openURL('http://localhost:9000');
);

gulp.task('start:server', function () 
    $.connect.server(
        root: [yeoman.temp, yeoman.app],
        livereload: true,
        port: 9000,
        middleware: function (connect, opt) 
            return [['/bower_components',
              connect["static"]('./bower_components')]]
        
    );
);

gulp.task('start:server:test', function () 
    $.connect.server(
        root: [yeoman.test, yeoman.app, yeoman.temp],
        livereload: true,
        port: 9001,
        middleware: function (connect, opt) 
            return [['/bower_components', connect["static"]('./bower_components')]
            ]
        
    );
);

gulp.task('watch', function () 
    $.watch(paths.styles)
      .pipe($.plumber())
      .pipe(styles())
      .pipe($.connect.reload())

    $.watch(paths.views.files)
      .pipe($.plumber())
      .pipe($.connect.reload())

    $.watch(paths.scripts)
      .pipe($.plumber())
      .pipe(lintScripts())

    $.watch(paths.test)
      .pipe($.plumber())

    gulp.watch('bower.json', ['bower']);
);

gulp.task('serve', function (cb) 
    runSequence('clean:tmp',
      ['bower'],
      ['lint:scripts'],
      ['start:client'],
      'watch', cb);
);

gulp.task('serve:prod', function () 
    $.connect.server(
        root: [yeoman.dist],
        livereload: 
            port: 810
        ,
        port: 800,
        middleware: function (connect, opt) 
            return [['/bower_components', connect["static"]('./bower_components')]
            ]
        
    );
);

gulp.task('test', ['start:server:test'], function () 
    var testToFiles = paths.testRequire.concat(paths.scripts, paths.test);
    return gulp.src(testToFiles)
      .pipe($.karma(
          configFile: paths.karma,
          action: 'watch'
      ));
);

// inject bower components
gulp.task('bower', function () 
    return gulp.src(paths.views.main)
      .pipe(wiredep(
          directory: /*yeoman.app +*/ 'bower_components',
          ignorePath: '..'
      ))
    .pipe(gulp.dest(yeoman.temp));
);

///////////
// Build //
///////////

gulp.task('clean:dist', function (cb) 
    rimraf(yeoman.dist, cb);
);

gulp.task('client:build', ['bower', 'html', 'styles'], function () 
    var jsFilter = $.filter('**/*.js');
    var cssFilter = $.filter('**/*.css');

    return gulp.src(paths.views.bowermain)
      .pipe($.useref( searchPath: [yeoman.app, yeoman.temp] ))
      .pipe(jsFilter)
      .pipe($.ngAnnotate())
      .pipe($.uglify())
      .pipe(jsFilter.restore())
      .pipe(cssFilter)
      .pipe($.minifyCss( cache: true ))
      .pipe(cssFilter.restore())
      .pipe(gulp.dest(yeoman.dist));
);

gulp.task('html', function () 
    return gulp.src(yeoman.app + '/views/**/*')
      .pipe(gulp.dest(yeoman.dist + '/views'));
);

gulp.task('copy:data', function () 
    return gulp.src(yeoman.app + '/data/**/*')
      .pipe(gulp.dest(yeoman.dist + '/data'));
);

gulp.task('copy:svg', function () 
    return gulp.src(yeoman.app + '/svg/**/*')
      .pipe(gulp.dest(yeoman.dist + '/svg'));
);



gulp.task('images', function () 
    return gulp.src(yeoman.app + '/images/**/*')
      .pipe($.cache($.imagemin(
          optimizationLevel: 5,
          progressive: true,
          interlaced: true
      )))
      .pipe(gulp.dest(yeoman.dist + '/images'));
);

gulp.task('copy:extras', function () 
    return gulp.src(yeoman.app + '/*/.*',  dot: true )
      .pipe(gulp.dest(yeoman.dist));
);

gulp.task('copy:fonts', function () 
    return gulp.src('./bower_components/bootstrap/dist/fonts/**/*')
      .pipe(gulp.dest(yeoman.dist + '/fonts'));
);

gulp.task('copy:icons', function() 
    return gulp.src('./bower_components/font-awesome/fonts/**.*') 
        .pipe(gulp.dest(yeoman.dist + '/fonts'));
);


gulp.task('copy:favicon', function () 
    return gulp.src(yeoman.app + '/favicon.ico')
      .pipe(gulp.dest(yeoman.dist));
);

gulp.task('build', ['clean:dist', 'bower'], function () 
    runSequence(['images', 'copy:data', 'copy:extras', 'copy:fonts','copy:icons', 'copy:svg', 'copy:favicon', 'client:build']);
);

gulp.task('default', ['build']);

【问题讨论】:

你能提供你的 gulp 脚本吗? @qxz - 我已经添加了我的 gulp.js 它在gulp.task('images', function () 内失败了吗?你能在那儿console.log(yeoman.app + '/images/**/*')吗?另外,您具体做了什么导致此错误开始发生? (我对 gulp 不熟悉) 【参考方案1】:

我使用我在工作中使用的 gulp 脚本来解决这个问题。 haakon.io 的答案对我有用。

带有缓存的东西会导致vinyl.fs 跳过我的图像文件夹中的某些文件。由于使用此脚本的站点具有很多图像资源,因此我在桌面上创建了一个图像文件夹并抓取所有图像的一半并将它们拖出文件夹并运行gulp images 任务.我慢慢地添加资源,直到我能找到绊倒乙烯基的文件。一旦我这样做了,在 Photoshop 中重新保存它就可以解决问题。在可以更新脚本之前,该解决方法效果最佳。当您有很多可能导致此问题的图像时;这是我发现的最简单的调试方法。

【讨论】:

【参考方案2】:

我禁用了缓存并且它起作用了。如果您使用 gulp,请更改:

  gulp.src('app/images/**/*')
    .pipe($.cache($.imagemin(
      // some options here
    )))

到:

  gulp.src('app/images/**/*')
    .pipe($.imagemin(
      // some options here
    ))

【讨论】:

【参考方案3】:

好吧,在我的显示器拔出很多头发并咒骂之后,我终于弄清楚了问题所在,希望它可以帮助其他人。

这些图像最初都在我的原型项目的 git 存储库中,我使用 Visual Studio 复制了这些图像并将其添加到我的新项目中。我不知道为什么,但是如果您在paint.net中打开这些图像并将它们保存在具有完全相同的名称和扩展名的完全相同的文件夹中,它们将被git标记为已更改,然后如果您运行gulp images任务,您就赢了' 不会得到如上所示的乙烯基错误。

绝对是头疼...

【讨论】:

我认为这与缓存有关,因为我在第一次运行时工作。

以上是关于没有指定路径!不能得到亲戚。 gulp 任务中的乙烯基-fs 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 gulp 任务更改 css 文件中的 url

gulp任务

gulp的使用方法

gulp 粗粗学习 记录下

gulp运行报错:Task function must be specified必须指定任务函数

代理URL不能与BrowserSync Gulp任务一起使用