吸棉耗时太长



我在gulp文件中有一个检查和实时重新加载的问题。他们花了很多时间来完成。

这是我的gulp文件,我做错了什么:

    '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']);

在我做了一些改变后,lint几乎需要20秒来完成,而liverolading需要5-6s来刷新浏览器。

任何建议吗?

Gulp ESLint插件一般很慢。我将它与Grunt进行了比较,发现它比Grunt慢了5-10倍。不知道为什么。

确保你运行的是最新版本的ESLint,并且你的src文件夹下没有node_modules目录。如果你这样做,你可以运行eslint--debug标志,以确保ESLint不检测文件在你的node_modules目录。如果由于某种原因它确实存在,添加.eslintignore文件并指定您不想在那里检测的所有内容。

一般来说,如果你想在编码时得到即时反馈,我建议查看编辑器集成。目前,几乎所有的编辑器都有ESLint插件。

在你写代码的窗口中直接显示错误。

我们最近在团队中遇到了同样的问题。最好的解决办法是只在修改过的文件上运行ESLint,而不是在所有js文件上运行。

我们使用nodemon来监视更改的文件,尽管gulp-watch具有相同的思想。

参见change事件。

那么您只需在更改的文件上运行一个lint函数。您可能需要解析相对文件路径。

gulp.watch(config.paths.js, ['js'])
    .on('change', lintFile);
const lintFile = (file) => {
  return gulp.src(file)
             .pipe(eslint());
};

有必要在开发时检查代码吗?

我们使用另一种方法:

1)不要在开发时检查代码,因为它很长,有时也不允许在调试时为某些东西创建"快速"mock。

2)只在提交前检查样式。如果出现问题,修复样式并检查一切是否正常。CI系统也可以控制你的提交。

所以,我的建议是将lint从watch任务中移除。

相关内容

  • 没有找到相关文章

最新更新