2016-05-19 13 views
2

Ich verwende das folgende Beispiel, um einen Express-Server einzurichten: https://github.com/sogko/gulp-recipes/tree/master/browser-sync-nodemon-expressjs.Fehler: hören EADDRINUSE 127.0.0.1:3000

Ich benutze Schluck, um mehrere Prozesse wie Minifying, Vulkanisieren und Falten mein Polymer-Projekt zu starten.

Die gulpfile.js ist 364 Zeilen groß, aber das ist der Teil, worauf es ankommt:

// Build and serve the output from the dist build 
appsPaths.forEach(function(app) { 
    gulp.task('serve:dist:' + app, 
    ['browser-sync', 'default:' + app]); 
}); 

gulp.task('browser-sync', ['nodemon'], function() { 

    // for more browser-sync config options: http://www.browsersync.io/docs/options/ 
    browserSync({ 
    notify: false, 
    snippetOptions: { 
     rule: { 
     match: '<span id="browser-sync-binding"></span>', 
     fn: function (snippet) { 
      return snippet; 
     } 
     } 
    }, 

    // informs browser-sync to proxy our expressjs app which would run at the following location 
    proxy: 'http://localhost:3000', 

    // informs browser-sync to use the following port for the proxied app 
    // notice that the default port is 3000, which would clash with our expressjs 
    port: 4000, 

    // open the proxied app in chrome 
    browser: ['google-chrome'] 
    }); 
}); 

gulp.task('nodemon', function (cb) { 
    var called = false; 
    return $.nodemon({ 

    // nodemon our expressjs server 
    script: 'server/app.js', 

    // watch core server file(s) that require server restart on change 
    watch: ['server/app.js'] 
    }) 
    .on('start', function onStart() { 
     // ensure start only got called once 
     if (!called) { cb(); } 
     called = true; 
    }) 
    .on('restart', function onRestart() { 
     // reload connected browsers after a slight delay 
     setTimeout(function reload() { 
     browserSync.reload({ 
      stream: false 
     }); 
     }, BROWSER_SYNC_RELOAD_DELAY); 
    }); 
}); 

Jetzt, während dies funktioniert gut und alles, was ich immer noch die folgenden Fehler in meinem schluck Protokoll enden:

^CDaniels-iMac:polymer dani$ gulp serve:dist:domain.com 
[22:33:10] Using gulpfile ~/dev/company/polymer/gulpfile.js 
[22:33:10] Starting 'nodemon'... 
[22:33:10] Starting 'clean:domain.com'... 
[22:33:10] Finished 'clean:domain.com' after 8.56 ms 
[22:33:10] Starting 'default:domain.com'... 
[22:33:10] Starting 'copy:domain.com'... 
[22:33:10] Starting 'styles:domain.com'... 
[22:33:11] Finished 'styles:domain.com' after 295 ms 
[22:33:11] [nodemon] 1.9.2 
[22:33:11] [nodemon] to restart at any time, enter `rs` 
[22:33:11] [nodemon] watching: server/app.js 
[22:33:11] [nodemon] starting `node server/app.js` 
[22:33:11] Finished 'nodemon' after 570 ms 
[22:33:11] Starting 'browser-sync'... 
[22:33:11] Finished 'browser-sync' after 20 ms 
events.js:154 
     throw er; // Unhandled 'error' event 
    ^

Error: listen EADDRINUSE 127.0.0.1:3000 
    at Object.exports._errnoException (util.js:890:11) 
    at exports._exceptionWithHostPort (util.js:913:20) 
    at Server._listen2 (net.js:1234:14) 
    at listen (net.js:1270:10) 
    at net.js:1379:9 
    at GetAddrInfoReqWrap.asyncCallback [as callback] (dns.js:63:16) 
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:82:10) 
[22:33:11] [nodemon] app crashed - waiting for file changes before starting... 
[BS] Proxying: http://localhost:3000 
[BS] Access URLs: 
---------------------------------- 
     Local: http://localhost:4000 
    External: http://10.0.1.28:4000 
---------------------------------- 
      UI: http://localhost:3001 
UI External: http://10.0.1.28:3001 
---------------------------------- 
[22:33:12] copy all files 16.03 MB 
[22:33:12] Finished 'copy:domain.com' after 1.78 s 
[22:33:12] Starting 'elements:domain.com'... 
[22:33:12] Finished 'elements:domain.com' after 5.39 ms 
[22:33:12] Starting 'jshint:domain.com'... 
[22:33:12] Starting 'images:domain.com'... 
[22:33:12] Starting 'fonts:domain.com'... 
[22:33:12] Starting 'html:domain.com'... 
[22:33:12] Finished 'images:domain.com' after 339 ms 
[22:33:12] Finished 'fonts:domain.com' after 157 ms 
[BS] Reloading Browsers... 

Dies ist, was sehe ich vor und nach dem Lauf des schluck Script Triggern:

Daniels-iMac:polymer dani$ lsof -i tcp:3000 
Daniels-iMac:polymer dani$ 
Daniels-iMac:polymer dani$ lsof -i tcp:3000 
COMMAND PID USER FD TYPE    DEVICE SIZE/OFF NODE NAME 
node 95580 dani 19u IPv4 0x8560662b0408bad3  0t0 TCP localhost:hbci (LISTEN) 

So An Port 3000 scheint nicht viel los zu sein. Was kann ich tun, um diesen Fehler zu beheben?

+0

Sieht aus, als ob Sie bereits Knoten auf Port 3000 ausgeführt haben. Sie können den Prozess beenden, indem Sie diese Frage überprüfen http://stackoverflow.com/questions/3855127/find-and-kill-process-locking-port-3000-on -mac –

+0

Ich habe das abgedeckt. Es läuft entweder nicht auf Port 3000 oder ich habe ein pid-Ergebnis, wenn ich 'lsof -i tcp: 3000' starte, je nachdem, ob ich einen Schluck lief oder nicht. Es ist also nicht so, dass bereits ein anderer Prozess läuft, ich habe mehrere andere unmögliche Ports ausprobiert: alle erzeugen den gleichen Fehler. Es scheint eher so, als würde der Express-Server zweimal mit nodemon starten. – Dani

Antwort

1

Ich denke, Sie laufen browserSync mit den gleichen Ports mehrmals auf http://localhost:3000 wegen der forEach, die ich vermute, hat mehrere Wege.

+0

Leider ist das ein Negativ. Beim Auslösen einer console.log in der Task-Funktion nodemon und browser-sync werden beide nur einmal ausgelöst. Dasselbe gilt für das Hinzufügen nur eines Elements zum appsPath-Array: Das Problem besteht weiterhin. Dieses Verhalten ist wie erwartet, da Sie beim Ausführen einer Funktion gulp.task nur die Aufgabe selbst definieren. Du machst es nicht. – Dani

+0

d0h! Es war zwar nicht genau das. Ich habe eine tryout require-Anweisung vergessen, die den Server oben auf meiner gulpfile lief und somit übersehen wurde. Danke für Ihre Hilfe Wilson Alberto – Dani

+0

Ich bin froh, dass Sie die Ursache gefunden haben! Gulp könnte einige bessere Debugging-Tools verwenden, dies ist eines der Probleme, die durch die Protokollierung der Aufgaben gelöst werden –