2017-02-16 6 views
0

나는 서버 제거시 꿀꺽 꿀꺽 마시고 watcher가 켜져있는 js 및 scss에 대한 작업을 받았습니다. 텍스트 편집기에 파일을 저장할 때마다 서버로 보내져 watcher가 파일 변경을보고 작업을 시작하지만 거의 언제나 컴파일 된 파일에서 방금 저장 한 파일이 누락됩니다.꿀꺽 꿀꺽함 작업은 내가 특별히 저장 한 파일을 놓치고 나머지는 모두 빌드합니다.

그게 무슨 뜻입니까, 나는 main.scss에 모두 포함되어있는 여러 _example.scss를 가지고 있으며, 방금 컴파일 한 모든 _example.scss 파일의 스타일을 출력 할 것입니다. .

이는 JS 및 SASS 작업 모두에서 발생하지만 watcher가 작업을 시작할 때만 발생합니다. 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

꿀꺽 마당에 파일이 누락된다고 말하면 스타일 작업이 완료되지만 컴파일 된 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

아마도 대부분의 경우 작동하지만 수동 대기 시간은 네트워크 속도 및 파일 크기에 따라 다소 해로운 해결책입니다. 작업이 시작될 때까지 파일 업로드가 완료되지 않을 수 있습니다. 꿀꺽 꿀꺽 거리기 작업을 시작하는 데 사용할 수있는 또 다른 방아쇠가 있을지, 꿀꺽 꿀꺽 거리는 시계 기능을 모두 포기할 수 있습니까? – biggles

+0

기술 예, 우리가 가진 문제는 우리가 파일 업로드의 시작을 발견하고 완료하지 못한다는 것입니다. gulp watcher를 사용하여 파일 변경 사항을 확인하는 대신 https://github.com/joh/when-changed와 같은 python 라이브러리를 사용하는 대신 gulp 파일 감시자와 비슷한 파일을 업로드하는 서버를 실행한다고 가정합니다 파일 업로드가 완료되면 트리거하고'when-changed -r/var/www/website/css/internal/var/www/website/js/internal -c gulp'와 같은 gulp 명령을 실행합니다. 그 이상으로, 똑같은 효과로 bash 스크립트를 만들 수 있습니다. – Teddy