8

sass/js コンパイル用の Gulp タスクを作成しようとしています。また、ライブ リロード用のコードも含めました。編集時に gulp.src が空のファイルをパイプにスローすることがあることを除いて、正常に動作します。

var gulp = require('gulp');

var sass = require('gulp-sass'),
    concat = require('gulp-concat'),
    uglify = require('gulp-uglify'),
    rename = require('gulp-rename'),
    clean = require('gulp-clean'),
    debug = require('gulp-debug'),
    livereload = require('gulp-livereload'),
    lr = require('tiny-lr'),
    server = lr(),
    spawn = require('child_process').spawn,
    node;


gulp.task('server', function() {
    if (node) node.kill();

    node = spawn('node', ['./index.js'], {stdio: 'inherit'});

    node.on('close', function (code) {
        if (code === 8) {
            gulp.log('Error detected, waiting for changes...');
        }
    });
});


gulp.task('html', function() {
    return gulp.src('./src/*.html')
        .pipe(gulp.dest('./build'))
        .pipe(livereload(server));
});


gulp.task('js', function() {
    return gulp.src(['./src/js/*.js'], { base: './' })

ファイルが保存されると、デバッグがgulp.src出力をチェックし、ほとんどの場合、適切なコンテンツのファイルが表示されますが、それらのファイルが空になることがあります。

        .pipe(debug())
        .pipe(concat("all.min.js"))
        .pipe(uglify())
        .pipe(gulp.dest('./build/js'))
        .pipe(livereload(server));
});


gulp.task('scss', function() {
    return gulp.src('./src/scss/*.scss')
        .pipe(sass())
        .pipe(concat("all.css"))
        .pipe(gulp.dest('./build/css/'))
        .pipe(livereload(server));
});


gulp.task('listen', function(next) {
    server.listen(35729, function(err) {
        if (err) return console.error(err);
        next();
    });
});


gulp.task('clean', function(){
    return gulp.src(['./build/*'], {read:false})
        .pipe(clean());
});


gulp.task('watch', function() {
    gulp.watch('./src/*.html', ['html']);
    gulp.watch('./src/scss/*.scss', ['scss']);
    gulp.watch('./src/js/*.js', ['js']);
    gulp.watch('./index.js', ['server']);
});


gulp.task('default', ['clean', 'html', 'scss', 'js', 'listen', 'server', 'watch'], function () {

});

それを修正する方法がわかりません。gulp を実行すると、最初は常に機能しますが、後でgulp.watch変更が表示されると問題が発生します。

Sublime Text で sftp パッケージを使用してファイルを保存すると、ファイルが空になってしまうようです。Vim によるリモート保存は常にうまく機能するため、非常に奇妙です。

4

1 に答える 1

17

それが正しいかどうかはわかりませんが、Sublime の SFTP はサーバー上のファイルを更新するのにより多くの時間を必要とするようです。Gulp.watch は、ファイルの準備ができていない場合でも、gulp タスクをトリガーします。setTimeout() を gulp.watch プロセスに追加した後、保存するたびに機能します。

gulp.watch('./src/js/*.js', function() {
        setTimeout(function () {
            gulp.start('js');
        }, 300);
    });
于 2014-02-28T16:16:08.383 に答える