【问题标题】:Gulp-inject says "Nothing to inject into index.html"Gulp-inject 说“没有东西可以注入 index.html”
【发布时间】:2024-04-28 23:05:03
【问题描述】:

我正在尝试在我的索引中注入一些文件,所有这些文件都被连接并缩小到一个 .tmp 文件夹中,如下所示:

gulp.task('prep-js',['clean'], function(){
  var jspath = './src/page/**/*.js';
  var treatJs = gulp.src(jspath)
         .pipe(plugins.concat('scripts.js'))
         .pipe(plugins.uglify())
         .pipe(gulp.dest('.tmp/page/js'))
});

但是当我运行注入任务时,它显示“Nothing to injection into index.html”。代码如下:

gulp.task('inject-deps', ['prep-css', 'prep-js'], function(){

  //select main bower files
  var bowerDep = gulp.src(plugins.mainBowerFiles(), {read: false});

  //inject files
  return  gulp.src('./src/page/index.html')
          .pipe(plugins.inject(bowerDep, {relative: true, name:'bower'}))
          .pipe(plugins.inject(gulp.src('.tmp/page/js/*.js'), {name:'frontjs'}))
          .pipe(plugins.inject(gulp.src('.tmp/page/css/*.css'), {name:'frontcss'}))
          .pipe(gulp.dest('.tmp/page'));
});

有趣的是,注入主要 bower 文件的第一个管道运行良好,但以下两个不会发生。

另外,仅供参考,“插件”是一个需要我的插件的变量。

对这个问题有任何想法吗?

【问题讨论】:

    标签: javascript dependency-injection gulp gulp-inject


    【解决方案1】:

    您需要在prep-js 任务中返回流:

    gulp.task('prep-js',['clean'], function(){
      var jspath = './src/page/**/*.js';
      return gulp.src(jspath)
             .pipe(plugins.concat('scripts.js'))
             .pipe(plugins.uglify())
             .pipe(gulp.dest('.tmp/page/js'))
    });
    

    否则inject-deps 将不会等待prep-js 完成才运行,这意味着连接和丑化的JS 文件将不在.tmp/page/js 中。

    Gulp documentation 的相关部分:

    注意:默认情况下,任务以最大并发运行——例如它立即启动所有任务并且什么都不等待。如果您想创建一系列任务以特定顺序运行,您需要做两件事:

    • 任务完成时给它一个提示,
    • 并提示它一项任务取决于另一项任务的完成。

    【讨论】:

    • 谢谢@svenschoenung!但是当我指定依赖任务时,它不是已经完成了吗,比如 ['prep-css', 'prep-js']?
    • 不,为了防止任务同时运行,您需要 both 我从文档中引用的要点。你有第二个(用['prep-css', 'prep-js'] 暗示依赖),但你错过了第一个(我加粗的那个)。
    • 这是一种选择,是的。如果您查看我链接的文档,您可以使用回调、承诺或只返回流(就像我在回答中所做的那样)。你试过我的解决方案了吗?请注意,我使用 return 语句,而您使用 var treatJs =
    • 是的,我意识到了!谢谢你的提示!