Gulp 注入不是以一种方式工作而是以另一种方式工作 - 没有区别吗?

Gulp inject not working one way but works the other - no difference is there?

我有一个 gulp 任务要将 Bower 组件注入我的 index.html 文件。我有 2 个不同的版本,一个有效,一个无效,我不知道为什么那个无效 b/c 它对我来说看起来完全一样。

不起作用

var gulp = require('gulp');
var inject = require('gulp-inject');
var mainBowerFiles = require('main-bower-files');

/**
 * Injects all the bower dependencies into index.html
 */
gulp.task('inject-bower-files', function() {
  return 
    gulp.src('./index.html')
      .pipe(inject(gulp.src(mainBowerFiles(), {read: false})))
      .pipe(gulp.dest('./'));
});

有效

var gulp = require('gulp');
var inject = require('gulp-inject');
var mainBowerFiles = require('main-bower-files');

/**
 * Injects all the bower dependencies into index.html
 */
gulp.task('inject-bower-files', function() {

  var target = gulp.src('./index.html');
  var sources = gulp.src(mainBowerFiles(), {read: false});

  return target.pipe(inject(sources))
    .pipe(gulp.dest('./'));
});

这两个有什么区别?

您的第一个示例因 JavaScript 的 automatic semicolon insertion 而失败。

相当于

var gulp = require('gulp');
var inject = require('gulp-inject');
var mainBowerFiles = require('main-bower-files');

/**
 * Injects all the bower dependencies into index.html
 */
gulp.task('inject-bower-files', function() {
  return; // <-- semicolon inserted here, nothing below this runs
    gulp.src('./index.html')
      .pipe(inject(gulp.src(mainBowerFiles(), {read: false})))
      .pipe(gulp.dest('./'));
});

要使其正常工作,请将其更改为

var gulp = require('gulp');
var inject = require('gulp-inject');
var mainBowerFiles = require('main-bower-files');

/**
 * Injects all the bower dependencies into index.html
 */
gulp.task('inject-bower-files', function() {
  // return is no longer on a line by itself
  return gulp.src('./index.html')
      .pipe(inject(gulp.src(mainBowerFiles(), {read: false})))
      .pipe(gulp.dest('./'));
});