【问题标题】:Gulp-connect shows an error 'listen EADDRINUSE'Gulp-connect 显示错误 'listen EADDRINUSE'
【发布时间】:2015-05-31 21:15:18
【问题描述】:

我有一个简单的 gulpfile.js:

   var gulp = require('gulp');   
var sass = require('gulp-sass');  
var connect = require('gulp-connect'); 
var imagemin = require('gulp-imagemin');
var notify = require("gulp-notify");
var pngquant = require('imagemin-pngquant');


gulp.task('connect', function() {
  connect.server({
    root: ['./'],
    livereload: true
  });
});

gulp.task('sass', function() {  
    gulp.src(['css/**/*.scss']) 
        .pipe(sass({
            errLogToConsole: false,
            onError: function(err) {
            return notify().write(err);
        }

    }))       
        .pipe(gulp.dest('build'))

        .pipe(notify({ message: 'Styles task complete' }))
        .pipe(connect.reload());
})



gulp.task('imagemin', function () {
    return gulp.src('src/images/*')
        .pipe(imagemin({
            progressive: true,
            svgoPlugins: [{removeViewBox: false}],
            use: [pngquant()]
        }))
        .pipe(gulp.dest('build/images/'));
});


gulp.task('default', function() {  
    gulp.run('connect', 'sass', 'imagemin');

      gulp.watch('css/**', function(event) {
        gulp.run('sass');
        gulp.run('connect');
    })

      gulp.watch('*.html', function(event) {       
        gulp.run('connect');
    })

    gulp.watch('src/images/*', function(event) {
        gulp.run('imagemin');
    })
})
gulp.task('start', ['connect']);

Livereload 服务器工作正常。但是,当我尝试编辑 scss 或 index.html 文件时,我收到以下错误:

events.js:72
        throw er; // Unhandled 'error'
              ^
Error: listen EADDRINUSE
    at errnoException (net.js:904:11)
    at Server._listen2 (net.js:1042:14)
    at listen (net.js:1064:10)
    at Server.listen (net.js:1138:5)
    at ConnectApp.server (C:\xampp\htdo
ex.js:57:19)
    at new ConnectApp (C:\xampp\htdocs\
js:37:10)
    at Object.module.exports.server (C:
connect\index.js:170:12)
    at Gulp.gulp.task.gulp.src.pipe.pip
smi2.0\gulpfile.js:10:11)
    at module.exports (C:\xampp\htdocs\
rchestrator\lib\runTask.js:34:7)
    at Gulp.Orchestrator._runTask (C:\x
de_modules\orchestrator\index.js:273:3)

没有 gulp-connect 一切正常。我确定 gulpfile.js 中有一个小的语法错误,但我找不到它。请帮忙解决这个问题。

这是一个最终的 gulpgile.js,它比@Rigotti 工作得很好:

  var gulp = require('gulp');   
var sass = require('gulp-sass');  
var connect = require('gulp-connect'); 
var imagemin = require('gulp-imagemin');
var notify = require("gulp-notify");
var pngquant = require('imagemin-pngquant');


gulp.task('connect', function() {
  connect.server({
    root: ['./'],
    livereload: true
  });
});

gulp.task('sass', function() {  
    gulp.src(['css/**/*.scss']) 
        .pipe(sass({
            errLogToConsole: false,
            onError: function(err) {
            return notify().write(err);
        }

    }))       
        .pipe(gulp.dest('build'))

        .pipe(notify({ message: 'Styles task complete' }))
        .pipe(connect.reload());
})



gulp.task('imagemin', function () {
    return gulp.src('src/images/*')
        .pipe(imagemin({
            progressive: true,
            svgoPlugins: [{removeViewBox: false}],
            use: [pngquant()]
        }))
        .pipe(gulp.dest('build/images/'));
});

gulp.task('html', function () {
  gulp.src('index.html')
    .pipe(connect.reload());
});

gulp.task('default', function() {  
    gulp.run('connect', 'sass', 'imagemin');

      gulp.watch('css/**', function(event) {
        gulp.run('sass');

    })

      gulp.watch('*.html', function(event) {       
         gulp.run('html');
    })

    gulp.watch('src/images/*', function(event) {
        gulp.run('imagemin');
    })
})
gulp.task('start', ['connect']);

【问题讨论】:

    标签: gulp


    【解决方案1】:

    EADDRINUSE 表示该端口已在使用中。

    在下面的代码中,您正在调用 default 中的 connect 任务,但是当您更改 .sass 文件时,它会再次调用 connect

    gulp.task('default', function() {  
        // server started
        gulp.run('connect', 'sass', 'imagemin');
    
        gulp.watch('css/**', function(event) {
           gulp.run('sass');
           gulp.run('connect'); // <-- problem! connect is already running!
        });
    ...
    

    所以你基本上是在尝试监听你正在使用的同一个端口,给你这个错误。

    删除watchs 中的gulp.run('connect') 就可以了。

    【讨论】:

    • 谢谢,它成功了。我没有足够的声望来投票,但我感谢你的帮助
    • @DenisTkachev 但你可以接受我的回答是正确的:)
    • 这也正是我的问题。谢谢。
    猜你喜欢
    • 2016-06-28
    • 2014-12-11
    • 2014-09-14
    • 2019-03-15
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 2021-06-04
    • 2014-11-21
    相关资源
    最近更新 更多