结合咖啡和js开发与Gulp

时间:2015-02-12 20:14:02

标签: javascript coffeescript gulp gulp-concat

使用Gulp在每次保存的基础上简化我的构建过程,同时消除对“临时”文件的需求是我的目标(以及为什么我选择使用Gulp而不是Grunt)

我最近发现,显然,coffeescript编译器无法处理基本Javascript作为源代码

所以这就错了:

gulp.task('scripts', function() {

    var stream =
            gulp.src([
                "bower_components/d3/d3.js",
                "bower_components/angular/angular.js",
                "bower_components/foundation/js/foundation.js",
                "public-dev/scripts/app.js",
                "public-dev/scripts/**/*.js",
                "public-dev/scripts/**/*.coffee"
            ])
                .pipe(coffee())
                .pipe(concat('compiled.js'))
                .pipe(gulp.dest('./public/scripts'))
        ;

    return stream;
});

这会产生输出/ errpr:

[11:58:51] Starting 'scripts'...

events.js:72
        throw er; // Unhandled 'error' event
              ^
/var/www/node.fortiguard.dev/bower_components/d3/d3.js:1:2: error: reserved word "function"
!function() {
 ^

如何在不重新创建临时文件的情况下进行设置?

我对LESS编译器的喜欢之处在于,它仍然可以直接输入CSS文件,并且没问题。我有点希望Coffee编译器会以同样的方式做出反应

3 个答案:

答案 0 :(得分:2)

我使用gulp-add-src来做到这一点。

var gulp = require('gulp'),
    coffee = require('gulp-coffee'),
    concat = require('gulp-concat'),
    addsrc = require('gulp-add-src');

// Scripts
gulp.task('coffee', function () {
  return gulp.src('src/coffee/**/*.coffee')
    .pipe(coffee())
    .pipe(addsrc('src/coffee/lib/*.js'))
    .pipe(concat('compiled.js'))
    .pipe(gulp.dest('dist'));
});

答案 1 :(得分:1)

可悲的是,它没有。您可以做的是使用基础event-stream的{​​{1}}方法。然后,您将有一个用于编译的merge文件和一个用于javascript端的文件的管道。

以下是coffee示例:

Gulpfile.coffee

答案 2 :(得分:1)

我将帕特里克·J·S的答案标记为“正确”,但实际上,这正是我需要做的。

那就是说,“event-stream”并不是我最终的目的,只是因为我需要保留文件的依赖结构,并且event-stream的{​​{1}}方法不会保留订购也没有选择。

相反,我选择了一个名为streamqueue的包,它确实保留了glob的顺序。可能比较慢,但订单在我的应用程序中很重要。将来我会尝试尽可能模块化。