【问题标题】:gulp : browserify then concat filesgulp : browserify 然后连接文件
【发布时间】:2016-03-31 09:44:57
【问题描述】:

我需要浏览一个文件,然后将捆绑包与另一个文件连接起来。我尝试了下面的 gulp 代码,但它不能正常工作。
当我在 mymodule.js 中进行更改并运行 gulp 时,这些更改会出现在捆绑文件中,但不会出现在连接文件中,除非我再次运行 gulp。
这就像 concat 步骤没有等待捆绑步骤完成并采用先前浏览器化的捆绑包。 由于我是 gulp 的初学者,我确信我的 gulp 逻辑有问题...

我的 gulpfile 是:

var gulp = require('gulp');
var browserify = require('browserify');
var source = require('vinyl-source-stream');
var concat = require('gulp-concat');

gulp.task('default', function() {
  var b = browserify('src/mymodule.js')
  .bundle()
  .pipe(source('mymodule-bundle.js'))
  .pipe(gulp.dest('src'));

  gulp.src([
        'bower_components/porthole/src/porthole.min.js',
        'src/mymodule-bundle.js'
    ])
    .pipe(concat('app.js'))
    .pipe(gulp.dest('dist'));
});

谢谢

【问题讨论】:

    标签: gulp browserify


    【解决方案1】:

    这就像 concat 步骤没有等待捆绑步骤完成并获取先前浏览器化的捆绑包

    这正是发生的事情。 Gulp 以异步方式工作并具有最大并发性,因此除非您告诉它等待某事,否则一切都会立即开始运行。

    您可以将您的任务分成两个任务,并向 Gulp 提示一个依赖于另一个:

    gulp.task('bundle', function() {
      return browserify('src/mymodule.js')
       .bundle()
       .pipe(source('mymodule-bundle.js'))
       .pipe(gulp.dest('src'));
    });
    
    gulp.task('default', ['bundle'], function() {
      return gulp.src([
        'bower_components/porthole/src/porthole.min.js',
        'src/mymodule-bundle.js'
      ])
      .pipe(concat('app.js'))
      .pipe(gulp.dest('dist'));
    });
    

    【讨论】:

      【解决方案2】:

      试试这个:

      var gulp = require('gulp');
      var browserify = require('browserify');
      var source = require('vinyl-source-stream');
      var concat = require('gulp-concat');
      
      var paths = [
       'bower_components/porthole/src/porthole.min.js',
       'src/mymodule-bundle.js'
      ];
      
      gulp.task('default', function() {
       return browserify('src/mymodule.js')
        .bundle()
        .pipe(source('mymodule-bundle.js'))
        .pipe(gulp.dest('src'));
      });
      
      gulp.task('default2', function() {
       return gulp.src(paths)
        .pipe(concat('app.js'))
        .pipe(gulp.dest('dist'));
      });
      
      gulp.task('final', ['default', 'default2']);
      

      每次你想创建一个包时都运行最终任务。

      【讨论】:

        【解决方案3】:

        实际上,您不需要像其他答案中提到的那样拆分任务:

        var gulp = require('gulp');
        var browserify = require('browserify');
        var source = require('vinyl-source-stream');
        var concat = require('gulp-concat');
        var merge = require('merge-stream');
        var buffer = require('vinyl-buffer');
        
        gulp.task('default', function () {
            var b = browserify('src/mymodule.js')
                    .bundle()
                    .pipe(source('mymodule-bundle.js'))
                    .pipe(buffer())
                    // remove this line if you don't need 'mymodule-bundle.js' to be saved at all 
                    .pipe(gulp.dest('src'));
        
            return merge(b, gulp.src('bower_components/porthole/src/porthole.min.js'))
                   .pipe(concat('app.js'))
                   .pipe(gulp.dest('dist'));
        });
        

        【讨论】:

          猜你喜欢
          • 2015-10-02
          • 1970-01-01
          • 1970-01-01
          • 2015-04-12
          • 1970-01-01
          • 1970-01-01
          • 2016-07-15
          • 2015-01-31
          • 2015-07-05
          相关资源
          最近更新 更多