多个gulp源和目的地

时间:2015-10-11 23:29:20

标签: javascript typescript gulp mocha

我正在尝试使用以下目录结构

-- src |__ app |__ x.ts |__ test |__ y.ts -- build |__ app |__ js |__ test |__ js

我希望在“gulp compile”上,我在build / app和build / test中生成了我生成的js文件。即我有多个来源和多个目的地。 我不想为测试一个创建一个新的gulp目标。以下是我尝试完成任务的两种方法

gulp.task('compile', function () {
    //path to src/app typescript files
    var app_js = gulp.src('./src/app/**/*.ts')
        .pipe(tsc(tsProject))
    //path to src/test typescript files
    var test_js = gulp.src('./src/test/**/*.ts')
        .pipe(tsc(tsProject));
    return merge([
        app_js.js.pipe(gulp.dest('./build/src/app/')),
        test_js.js.pipe(gulp.dest('./build/src/test/'))
    ]);
});

gulp.task('bundle', function () {
    var paths = [
        { src: './src/app/**/*.ts', dest: './build/src/app/' },
        { src: './src/test/**/*.ts', dest: './build/src/test/' }
    ];
    var tasks = paths.map(function (path) {
        return gulp.src(path.src).pipe(tsc(tsProject)).pipe(gulp.dest(path.dest));
    })
    return merge(tasks);
});

然而,每次,我运行“gulp compile”或“gulp bundle”,我都会遇到以下问题

  

events.js:141         扔掉//未处理的'错误'事件   ^错误:EOF后的stream.push()       在readableAddChunk(_stream_readable.js:132:15)

有人能告诉我,我在这里做错了什么吗? 注意:我尝试使用merge-stream和merge2包。

2 个答案:

答案 0 :(得分:0)

我的一个项目中有相同的项目结构,我使用以下内容进行构建任务:

var tsProject = tsc.createProject({
  removeComments : false,
  noImplicitAny : false,
  target : "ES5",
  module : "commonjs",
  declarationFiles : false
});

gulp.task("build-source", function() {
  return gulp.src(__dirname + "/source/**/**.ts")
             .pipe(tsc(tsProject))
             .js.pipe(gulp.dest(__dirname + "/build/source/"));
});

var tsTestProject = tsc.createProject({
  removeComments : false,
  noImplicitAny : false,
  target : "ES5",
  module : "commonjs",
  declarationFiles : false
});

gulp.task("build-test", function() {
  return gulp.src(__dirname + "/test/*.test.ts")
             .pipe(tsc(tsTestProject))
             .js.pipe(gulp.dest(__dirname + "/build/test/"));
});

gulp.task("build", function(cb) {
  runSequence("lint", "build-source", "build-test", cb);
});

我正在使用两个独立的任务,因为使用一个具有多个源和多个目标的tsProject对象可能会导致意外行为。

  

您必须在任务之外创建项目。您不能在多个任务中使用相同的项目。而是创建多个项目或使用单个任务来编译源。 - Source

我还使用以下内容进行捆绑任务:

gulp.task("bundle-source", function () {
  var b = browserify({
    standalone : 'inversify',
    entries: __dirname + "/build/source/inversify.js",
    debug: true
  });

  return b.bundle()
    .pipe(source("inversify.js"))
    .pipe(buffer())
    .pipe(gulp.dest(__dirname + "/bundled/source/"));
});

gulp.task("bundle-test", function () {
  var b = browserify({
    entries: __dirname + "/build/test/inversify.test.js",
    debug: true
  });

  return b.bundle()
    .pipe(source("inversify.test.js"))
    .pipe(buffer())
    .pipe(gulp.dest(__dirname + "/bundled/test/"));
});

gulp.task("bundle", function(cb) {
  runSequence("build", "bundle-source", "bundle-test", "document", cb);
});

我的整个构建脚本可用here。希望它有所帮助!

答案 1 :(得分:0)

奥尔!感谢您的及时回复。

我最终得到以下解决方案

gulp.task('compile', function () {
    return gulp.src(['src/**/*.ts'] )
        .pipe(sourcemaps.init())
        .pipe(tsc(tsProject))
        .pipe(sourcemaps.write('.'))
        .pipe(gulp.dest('build'));
});"