2017-02-16 3 views
0

私は、サーバーを削除してgulpをセットアップし、ウォッチャーがオンになっているjsとscssのタスクを取得しました。テキストエディタでファイルを保存すると、ウォッチャがファイルの変更を確認してタスクを開始するサーバにsftpが送信されますが、ほとんどの場合、コンパイルされたファイルは今保存したファイルを失います。Gulpタスクは私が特に保存したファイルを逃して残りのすべてをビルドします

私はそれが私がmain.scssにすべて含まれている複数の_example.scssを持っているということです。コンパイルして、すべての_example.scssファイルのスタイルを出力します。 。

これはJSとSASSタスクの両方で発生しますが、ウォッチャーがタスクを開始したときにのみ発生します。 Gulpを停止して起動すると、すべてのファイルがコンパイルされます。

は、ここで私は、端末からのエラーを取得していない、それを明確にするためにgulpfile.js

var gulp = require('gulp'); 
var gutil = require('gulp-util'); 
var gulpif = require('gulp-if'); 
var autoprefixer = require('gulp-autoprefixer'); 
var sass = require('gulp-sass'); 
var cleanCSS = require('gulp-clean-css'); 
var concat = require('gulp-concat'); 
var plumber = require('gulp-plumber'); 
var buffer = require('vinyl-buffer'); 
var source = require('vinyl-source-stream'); 
var babelify = require('babelify'); 
var browserify = require('browserify'); 
var watchify = require('watchify'); 
var uglify = require('gulp-uglify'); 
var sourcemaps = require('gulp-sourcemaps'); 
var transform = require('vinyl-transform'); 
var streamify = require('gulp-streamify'); 

/* 
|-------------------------------------------------------------------------- 
| Same as browserify task, but will also watch for changes and re-compile. 
|-------------------------------------------------------------------------- 
*/ 
gulp.task('js', function() { 
    return browserify('./js/main.js') 
     .transform(babelify, {presets: ["es2015"]}) 
     .bundle() 
     .on('error', function(e) { 
      gutil.log(e); 
     }) 
     .pipe(source('bundle.js')) 
     .pipe(streamify(uglify())) 
     .pipe(gulp.dest('./js/build')); 
}); 

/* 
|-------------------------------------------------------------------------- 
| Compile LESS stylesheets. 
|-------------------------------------------------------------------------- 
*/ 
gulp.task('styles', function() { 
    return gulp.src('./scss/main.scss') 
    .pipe(sass.sync().on('error', sass.logError)) 
    .pipe(cleanCSS()) 
    .pipe(gulp.dest('./css')); 
}); 

gulp.task('watch', function() { 
    gulp.watch('./scss/**/*.scss', ['styles']); 
    gulp.watch('./js/components/*.js', ['js']); 
    gulp.watch('./js/*.js', ['js']); 
}); 

gulp.task('default', ['styles', 'js', 'watch']); 

です。私の出力は次のようになります。答えを探してここに来る人のために

[15:45:50] Using gulpfile /example/path/to/gulpfile.js 
[15:45:50] Starting 'styles'... 
[15:45:50] Starting 'js'... 
[15:45:50] Starting 'watch'... 
[15:45:50] Finished 'watch' after 17 ms 
[15:45:50] Finished 'styles' after 221 ms 
[15:45:53] Finished 'js' after 2.86 s 
[15:45:53] Starting 'default'... 
[15:45:53] Finished 'default' after 4.96 μs 
+0

gulpがあなたのファイルを "見逃す"と言うと、スタイルタスクは完了しますが、コンパイル済みのCSSには、以前編集したばかりのsass部分が含まれていますか? – biggles

+0

いいえ、このファイル以外のファイルはすべて保存するように見えますが、まるで存在しないかのように無視します。 FTP転送によってファイルが削除されていると考えられ、ファイルが変更されていると考えられ、ファイルが失われている間に構築され、ファイルがサーバーに再度書き込まれます。何か案は? – Teddy

+0

それで、あなたが保存した部分は、コンパイルされたCSSにはまったく含まれていませんか?ガルプの仕事はどのように引き起こされていますか?サーバー上でgulp.watchが実行されていますか?もしそうなら、私はこれが実際にFTPがサーバーに書き込む方法に関するタイミングの問題であると推測しなければならないでしょう。 – biggles

答えて

1

、あなたはこの質問の答えを参照することができgulp.watch() not working with ftp update

TL; DRザ・FTP転送プロトコルは、まず、それはの残りの部分を送信することができます確認するためにパケットを送信しますファイル。最初のパケットはGULPタスクを起動し、現在空のファイルをコンパイルします。ネットワークの速度が遅いほど、転送に時間がかかります。 '修正'は、ファイルをコンパイルする前に一定の時間だけタスクを遅らせることです。私はhttps://www.npmjs.com/package/gulp-waitを使用しましたが、私は他人がそのトリックをすることができると確信しています。

+0

ほとんどの場合、ほとんどの場合動作しますが、手動の待機時間は、ネットワークの速度とファイルサイズに応じて、いくらかハック的な解決策です。タスクの開始時までにファイルのアップロードが完了していない可能性があります。 gulpタスクを開始するために使用できる別のトリガーがあり、gulpのウォッチ機能を完全に破棄している可能性はありますか? – biggles

+0

テクニカルはい、私たちが持っている問題は、ファイルのアップロードの開始を検出し、完了していないことです。 gulpウォッチャーを使ってファイルの変更をチェックするのではなく、ファイルをアップロードするサーバーを実行していると仮定すると、gulpファイルウォッチャーのようなhttps://github.com/joh/when-changedのようなpythonライブラリーを使用しますファイルのアップロードが完了したときにトリガし、 'when-changed -r/var/www/website/css/internal/var/www/website/js/internal -c gulp'のようなgulpコマンドを起動するために使用します。これまで以上に、まったく同じ効果のbashスクリプトを作成することができました。 – Teddy

関連する問題