结合咖啡和 js 开发 Gulp

combined coffee and js development with Gulp

使用 Gulp 在每次保存的基础上简化我的构建过程,同时消除对 "temp" 文件的需求是我的目标(也是为什么我选择使用 Gulp咕噜声)

我最近发现,显然,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;
});

这会产生 output/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 编译器会以同样的方式做出反应

遗憾的是,事实并非如此。您可以做的是使用底层 event-streammerge 方法。然后,您将拥有一个用于编译的 coffee 文件的管道和一个用于 javascript 端的管道。

这是一个例子Gulpfile.coffee:

coffee = require 'gulp-coffee'
es     = require 'event-stream'

gulp.task 'scripts', () ->
  es.merge(
    gulp.src(["public-dev/app.js", "public-dev/scripts/**/*.js"]) # ...
    gulp.src("public-dev/**/*.coffee").pipe coffee()
    )
  .pipe concat 'all.js'
  .pipe gulp.dest "build"

我将 Patrick J.S. 的回答标记为 "Correct" 因为实际上,这正是我需要做的。

也就是说,"event-stream" 不是我最终选择的,只是因为我需要保留我的文件依赖结构,而 event-streammerge() 方法可以不是保护者命令,也没有选项。

相反,我选择了一个名为 streamqueue 的包,它确实保留了 glob 的顺序。可能更慢,但不幸的是,订单在我的应用程序中很重要。以后我会尽量模块化。

我用 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'));
});