2015-01-20 10 views
28

Używam gulp-exec (https://www.npmjs.com/package/gulp-exec), który po przeczytaniu części dokumentacji wspomina, że ​​jeśli chcę po prostu uruchomić polecenie, nie powinienem używać wtyczki i użyj kodu, którego próbowałem użyć poniżej.Uruchamianie polecenia z gulp, aby uruchomić serwer Node.js

var exec = require('child_process').exec; 

gulp.task('server', function (cb) { 
    exec('start server', function (err, stdout, stderr) { 
    .pipe(stdin(['node lib/app.js', 'mongod --dbpath ./data'])) 
    console.log(stdout); 
    console.log(stderr); 
    cb(err); 
    }); 
}) 

Próbuję dostać łyk, aby uruchomić mój serwer Node.js i MongoDB. To właśnie próbuję osiągnąć. W moim oknie terminala, jego narzekają moi

.pipe 

Jednak jestem nowy łykać i myślałem, że to w jaki sposób można przejść za pomocą komend/zadań. Każda pomoc jest doceniana, dziękuję.

+1

nb: Nie potrzebujesz modułu gulp-exec. Podany w pierwszym komentarzu "uwaga:" na stronie modułu ➝ https://www.npmjs.com/package/gulp-exec –

Odpowiedz

40
gulp.task('server', function (cb) { 
    exec('node lib/app.js', function (err, stdout, stderr) { 
    console.log(stdout); 
    console.log(stderr); 
    cb(err); 
    }); 
    exec('mongod --dbpath ./data', function (err, stdout, stderr) { 
    console.log(stdout); 
    console.log(stderr); 
    cb(err); 
    }); 
}) 

Na wypadek, gdyby ktoś inny napotkał ten problem.

Powyższy kod naprawił mój problem. Więc w zasadzie, okazało się, że powyższe jest swoją funkcję, a zatem nie trzeba:

.pipe 

Myślałem, że ten kod:

exec('start server', function (err, stdout, stderr) { 

była nazwa zadania jestem działa jednak to, jakie polecenie będę uruchamiał. Dlatego zmieniłem to tak, aby wskazywało app.js, który uruchamia mój serwer i zrobił to samo, aby wskazać moje MongoDB.

EDIT

Jako @ N1mr0d wymienione poniżej z konieczności nie ma wyjścia Serwer lepszego sposobu, aby uruchomić serwer byłoby użyć nodemon. Możesz po prostu uruchomić nodemon server.js tak, jakbyś mógł uruchomić node server.js.

Kod poniżej fragment jest co używam w moim zadaniu haustem uruchomić mój serwer teraz używając nodemon:

// start our server and listen for changes 
gulp.task('server', function() { 
    // configure nodemon 
    nodemon({ 
     // the script to run the app 
     script: 'server.js', 
     // this listens to changes in any of these files/routes and restarts the application 
     watch: ["server.js", "app.js", "routes/", 'public/*', 'public/*/**'], 
     ext: 'js' 
     // Below i'm using es6 arrow functions but you can remove the arrow and have it a normal .on('restart', function() { // then place your stuff in here } 
    }).on('restart',() => { 
    gulp.src('server.js') 
     // I've added notify, which displays a message on restart. Was more for me to test so you can remove this 
     .pipe(notify('Running the start tasks and stuff')); 
    }); 
}); 

Link do zainstalowania Nodemon: https://www.npmjs.com/package/gulp-nodemon

+2

Jak zatrzymać jeden z serwerów? – tmuecksch

+0

@tmuecksch powyżej używam zarówno mojego serwera węzła, jak i bazy danych w zadaniu gulp. Jeśli chcesz go zatrzymać i uruchomić, musisz wykonać dwa różne zadania: – PourMeSomeCode

+0

@tmuecksch 'exec ('killall mongod', function (err, stdout, stderr) {' –

8

To rozwiązanie ma stdout/stderr pokazane jak oni występują i nie korzysta z bibliotekami 3rd Party:

var spawn = require('child_process').spawn; 

gulp.task('serve', function() { 
    spawn('node', ['lib/app.js'], { stdio: 'inherit' }); 
}); 
+0

Pamiętaj tylko, aby zabić proces potomny przed jego ponownym uruchomieniem. –

0

można również utworzyć węzeł łyk zadania serwera biegacza tak:

gulp.task('server', (cb) => { 
    exec('node server.js', err => err); 
}); 
+0

Jak to się różni od zaakceptowanej odpowiedzi? – lolbas

+0

To jest tak samo jak inne z mniejszym kodem. –

Powiązane problemy