2016-09-02 22 views
0

gulpファイルでlintingとlive reloadingに問題があります。彼らは仕上げに多くの時間がかかります。ここでGulp lintに時間がかかりすぎる

は私が間違って何をしますか、私のがぶ飲みファイルです:

'use strict'; 

console.time("Loading plugins"); //start measuring 

var gulp = require('gulp'); 
var connect = require('gulp-connect'); 
var open = require('gulp-open'); 
var browserify = require('browserify'); 
var source = require('vinyl-source-stream'); 
var concat = require('gulp-concat'); 
var babelify = require('babelify'); 
var sass = require('gulp-sass'); 
var merge = require('merge-stream'); // Merge all styles (css, sass and less) in one big bundle 
var lint = require("gulp-eslint"); 

var config = { 
    port: 8001, 
    devBaseUrl: 'http://localhost', 
    paths: { 
     html: "./src/*.html", 
     externals: "./src/assets/externals/*.js", 
     js: "./src/**/*.js", 
     images: './src/assets/images/**/*', 
     fonts: './src/assets/css/fonts/*', 
     css: [ 
      "./src/assets/css/*", 
     ], 
     sass: './src/assets/css/*.scss', 
     dist: "./dist", 
     mainJS: "./src/main.js" 
    } 
}; 


gulp.task('connect', ['watch'], function() { 
    connect.server({ 
     root: ['dist'], 
     port: config.port, 
     base: config.devBaseUrl, 
     livereload: true, 
     fallback: './dist/index.html' 
    }) 
}); 

gulp.task('open', ['connect'], function() { 
    gulp.src('dist/index.html') 
     .pipe(open({uri: config.devBaseUrl + ":" + config.port + "/"})); 
}); 


gulp.task('html', function() { 
    gulp.src(config.paths.html) 
     .pipe(gulp.dest(config.paths.dist)) 
     .pipe(connect.reload()); 
}); 


gulp.task('externals', function() { 
    gulp.src(config.paths.externals) 
     .on('error', console.error.bind(console)) 
     .pipe(concat('external.js')) 
     .pipe(gulp.dest(config.paths.dist + '/externals')) 
     .pipe(connect.reload()); 
}); 


gulp.task('js', function() { 
    browserify(config.paths.mainJS) 
     .transform('babelify', {presets: ['es2015', 'react']}) 
     .bundle() 
     .on('error', console.error.bind(console)) 
     .pipe(source('bundle.js')) 
     .pipe(gulp.dest(config.paths.dist + '/scripts')) 
     .pipe(connect.reload()); 
}); 


gulp.task('images', function() { 
    gulp.src(config.paths.images) 
     .pipe(gulp.dest(config.paths.dist + '/images')); 
}); 


gulp.task('styles', function() { 
    gulp.src(config.paths.css) 
     .pipe(sass()) 
     .pipe(concat('bundle.css')) 
     .pipe(gulp.dest(config.paths.dist + '/css')) 
     .pipe(connect.reload()); 

}); 

gulp.task('fonts', function() { 
    gulp.src(config.paths.fonts) 
     .pipe(gulp.dest(config.paths.dist + '/css/fonts')); 
}); 

gulp.task('lint', function() { 
    return gulp.src(config.paths.js) 
     .pipe(lint()) 
     .pipe(lint.format()); 
}); 


gulp.task('watch', function() { 
    gulp.watch(config.paths.js, ['js', 'lint']); 
    gulp.watch(config.paths.css, ['styles']); 
}); 

console.timeEnd('Loading plugins'); 

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

糸くずが終了するのはほぼ20代がかかり、liveroladingは、私はいくつかの変更を行った後、ブラウザをリフレッシュする5-6sを取ります。

アドバイスはありますか?

答えて

0

開発中にコードをチェックする必要がありますか?私たちは、別のアプローチを使用

1)が開発しながら、それは長いので、コードを確認し、また、それが時にはデバッグ中に何かのために「速い」のモックを作成することはできませんしないでください。

2)コミットする前にのみスタイルをチェックします。何かが間違っている場合は、スタイルを修正してすべてが機能することを確認します。また、CIシステムはあなたのコミットを制御することができます。

私の提案は、監視タスクからlintを削除することです。

+0

私はそれを取り除くことができる、私はそれを知っていた。しかし、それを維持するためのソリューションはありますか?実行時間を短縮するには?私がそれを削除すると、私のコードにいくつかの変更を加えるためにブラウザが数秒(5-6)かかります。 – Boky

+0

開発中にチェックしないのはなぜですか?かなりのJavaScript開発ツールであれば、すぐにファイルを埋め込むことができます。ファイルを有効にしてBAMを開くと、すべての問題が報告されます。速度の低下や問題はなく、ただちに表示され、入力するときに入力します。確かに、あなたはギャルプ糸くずれの監視タスクを必要としません、そして、なぜ、遅くなくても、あなたが現在見ている同じ場所にエラーを表示しません。私は真剣にその場でlintingは悪い習慣ではないと思う。 – vlaz

1

gulp ESLintプラグインは、一般的に非常に遅いです。私はそれをある時点でGruntと比較したが、それは約5〜10倍遅かった。理由を知らない。

最新バージョンのESLintを実行していることと、フォルダの下にnode_modulesというディレクトリがないことを確認してください。そうであれば、を--debugフラグで実行して、ESLintがnode_modulesディレクトリのファイルを埋め込んでいないことを確認することができます。何らかの理由でそれがある場合は、.eslintignoreファイルを追加して、そこに糸を引きしたくないものをすべて指定してください。

一般的に、コーディング中に即時フィードバックが必要な場合は、エディタの統合を検討することをおすすめします。ほとんどすべてのエディタはこの時点でESLintプラグインを持っています。彼らはあなたのコードを書いているウィンドウに直接エラーを表示します。

0

私は最近、私のチームで同じ問題を抱えています。最適な回避策は、すべてのjsファイルではなく、変更されたファイルに対してのみESLintを実行することでした。

変更されたファイルを監視するためにnodemonを使用しますが、gulp-watchも同じ考え方です。

イベントgulp-watchを参照してください。

次に、変更されたファイルに対してlint関数を実行します。 相対ファイルパスを解決する必要があります。

gulp.watch(config.paths.js, ['js']) 
    .on('change', lintFile); 

const lintFile = (file) => { 
    return gulp.src(file) 
      .pipe(eslint()); 
}; 
関連する問題