Kaip galima iš naujo paleisti „Gulp“ kiekvieną kartą, kai keičiasi „Gulpfile“?

Gulpfile . Ar galiu ją iš naujo paleisti, kai tik jis pasikeis? Aš ją projektuoju „CoffeeScript“. Ar Gulpfile.coffee gali žiūrėti „ Gulpfile.coffee , kad išsaugotų pakeitimus?

56
05 апр. nustatė coool 05 Bal 2014-04-05 23:54 '14, 23:54, 2014-04-05 23:54
@ 13 atsakymų

Jūs galite sukurti task , kuri bus gulp.watchgulpfile.js , ir tiesiog spawn kito gulp child_process .

yargs kad yargs priimti „pagrindinę užduotį“, kad galėtumėte paleisti, kai tik mums reikės iš naujo paleisti.  Todėl, norėdami tai pradėti, turite skambinti: 

 gulp auto-reload --task watching-task 

Norėdami patikrinti, skambinkite arba touch gulpfile.js , arba touch a.css kad peržiūrėtumėte žurnalus.

51
06 апр. Caio Cunha atsakymas, balandžio 6 d 2014-04-06 18:56 '14 at 18:56 2014-04-06 18:56

Aš sukūriau gulperį, kuris yra gulp.js cli įvynioklis, norint paleisti gulp, kai pasikeičia gulpfile.

Jūs galite tiesiog pakeisti gulp su gulper.

 $ gulper <task-name> 
30
28 янв. atsakymas, kurį pateikė anatoo 28 sausis 2015-01-28 07:13 '15, 7:13 2015-01-28 07:13

Aš naudoju šį mažą apvalkalo scenarijų. Tai taip pat veikia „Windows“.

Paspauskite Ctrl+C kad sustabdytumėte scenarijų.

 // gulpfile.js gulp.task('watch', function() { gulp.watch('gulpfile.js', process.exit); }); 

Bash shell scenarijus:

 # watch.sh while true; do gulp watch; done; 

„Windows“ versija: watch.bat

 @echo off :label cmd /c gulp watch goto label 
10
11 марта '15 в 17:46 2015-03-11 17:46 atsakymą pateikė Simonas Epskampas kovo 11 d., 15 val. 17:46 2015-03-11 17:46

EADDRINUSE daugybę EADDRINUSE klaidų su sprendimu, atsakydamas į Caio Cunha. Mano gulpfile atidaro vietinį žiniatinklio serverį su prisijungimu ir „ LiveReload“ . Atrodo, kad naujasis gulp procesas trumpai egzistuoja kartu su senu, prieš sunaikinant seną procesą, todėl uostus vis dar naudoja „greitas mirties“ procesas.

Panašus sprendimas, skirtas spręsti sambūvio problemą (daugiausia dėl šios problemos ):

9
15 дек. joemallerio atsakymas gruodžio 15 d 2014-12-15 08:36 '14, 08:36 2014-12-15 08:36

Kitas sprendimas - atnaujinti reikalavimą.

3
18 сент. atsakymą pateikia stringparser 18 sep . 2014-09-18 22:23 '14, 22:23 pm 2014-09-18 22:23

Žinau, kad tai labai senas klausimas, tačiau tai yra pagrindinis „Google“ komentaras, todėl jis vis dar yra labai svarbus.

Čia yra paprastesnis būdas, jei jūsų gulpfile.js šaltinis yra kitame kataloge, nei naudojamas. (Tai svarbu!) Jis naudoja „gulp gulp-newer“ ir „ gulp-data“ modulius.

 var gulp = require('gulp' ) , data = require('gulp-data' ) , newer = require('gulp-newer' ) , child_process = require('child_process') ; gulp.task( 'gulpfile.js' , function() { return gulp.src( 'sources/gulpfile.js' ) // source .pipe( newer( '.' ) ) // check .pipe( gulp.dest( '.' ) ) // write .pipe( data( function(file) { // reboot console.log('gulpfile.js changed! Restarting gulp...') ; var t , args = process.argv ; while ( args.shift().substr(-4) !== 'gulp' ) { t=args; } child_process.spawn( 'gulp' , args , { stdio: 'inherit' } ) ; return process.exit() ; } ) ) ; } ) ; 

Jis veikia taip:

  • Trick 1: gulp -newer vykdo tik šiuos kanalus, jei šaltinio failas yra naujesnis nei dabartinis. Taigi esame tikri, kad nėra perkrovimo ciklo.
  • Ketvirtoji kilpa pašalina viską prieš ir įtraukdama gulp komandą iš komandų eilutės, kad galėtume perduoti bet kokius argumentus.
  • child_process.spawn generuoja naują gulp procesą, įvedant įvesties duomenis ir klaidą tėvui.
  • Trick 2: procesas.exit nužudo dabartinį procesą. Tačiau procesas laukia, kol baigs vaiko procesą.

Yra daug kitų būdų įterpti perkrovimo funkciją į vamzdžius. Aš naudoju gulp -duomenis kiekviename mano gulpfiles. Nesivaržykite komentuoti savo sprendimą. :)

2
12 нояб. atsakyti į pateiktą pasiūlymą lapkričio 12 d 2016-11-12 06:00 '16 at 6:00 2016-11-12 06:00

Čia yra dar viena „@CaioToOn“ naujo kodo versija, kuri labiau atitinka įprastą „Gulp“ užduočių procedūrą. Ji taip pat nepriklauso nuo yargs .

Reikalauti proceso kintamojo išvaizdos ir inicijavimo ( yargs nereikia):

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

Numatytoji „Gulp“ užduotis bus kūrėjas:

 gulp.task('default', function() { if(p) { p.kill(); } // Note: The 'watch' is the new name of your normally-default gulp task. Substitute if needed. p = spawn('gulp', ['watch'], {stdio: 'inherit'}); }); 

Jūsų užduotis peržiūrai tikriausiai buvo jūsų numatytoji užduotis, Gulp. Pervardykite jį, kad galėtumėte watch ir pridėti „ gulp.watch() kad galėtumėte peržiūrėti „gulpfile“ ir paleisti default užduotį pakeitimuose:

 gulp.task('watch', ['sass'], function () { gulp.watch("scss/*.scss", ['sass']); gulp.watch('gulpfile.js', ['default']); }); 

Dabar tiesiog paleiskite gulp ir jis automatiškai perkraunamas, jei pakeisite gulpfile!

1
21 окт. atsakymas ddunderfelt 21 spalis 2014-10-21 09:35 '14 at 9:35 am 2014-10-21 09:35

išbandyti šį kodą (tik Win32 platforma)

 gulp.task('default', ['less', 'scripts', 'watch'], function(){ gulp.watch('./gulpfile.js').once('change' ,function(){ var p; var childProcess = require('child_process'); if(process.platform === 'win32'){ if(p){ childProcess.exec('taskkill /PID' + p.id + ' /T /F', function(){}); p.kill(); }else{ p = childProcess.spawn(process.argv[0],[process.argv[1]],{stdio: 'inherit'}); } } }); }); 
1
09 мая '16 в 16:13 2016-05-09 16:13 atsakymą pateikė AhbapAldirmaz gegužės 09–16 d. 16:13 2016-05-09 16:13

Aš nagrinėjau tą pačią problemą, o mano atveju sprendimas buvo labai paprastas. Du dalykai.

  • npm install nodemon -g (arba vietoje, jei norite)
  • paleiskite su cmd arba sukurkite scenarijų šiuose paketuose: "dev": "nodemon --watch gulpfile.js --exec gulp"
  • Tiesiog įveskite npm run dev

- peržiūra rodo failą, kurį reikia stebėti, --exec sako, kad kito eilutės ir gulp atlikimas yra numatytasis uždavinys. Tiesiog perduokite argumentą, jei norite nestandartinės užduoties.

Tikiuosi, kad tai padės.

EDIT: Padarykite jį fantazija;) Dabar, kai pirmoji dalis yra tai, ko jums reikia, mano sąranka turėjau pridėti šiek tiek daugiau, kad galėčiau tapti tikru vartotoju. Aš norėjau

  • Pirmiausia atidarykite puslapį.
  • Ieškokite gulpfile.js pakeitimų ir iš naujo paleiskite gulp, jei yra
  • „Gulp“ turėtų stebėti failus, atstatyti ir perkrauti

Jei atliksite tik tai, ką pasakiau pirmoje dalyje, jis kiekvieną kartą atvers puslapį. Norėdami išspręsti šią problemą, sukurkite gulp užduotį, kuri atvers puslapį. Čia jis yra:

 gulp.task('open', function(){ return gulp .src(config.buildDest + '/index.html') .pipe(plugins.open({ uri: config.url })); 

Tada mano pagrindiniuose uždaviniuose:

 gulp.task('default', ['dev-open']); gulp.task('dev-open', function(done){ plugins.sequence('build', 'connect', 'open', 'watch', done); }); gulp.task('dev', function(done){ plugins.sequence('build', 'connect', 'watch', done); }); 

Tada pakeiskite „npm“ scenarijus į

 "dev": "gulp open  nodemon --watch gulpfile.js --watch webpack.config.js --exec gulp dev" 

Suteikia jums būtent tai, ko norite. Pirmiausia atidarykite puslapį ir tiesiog tęskite tiesioginį perkrovimą. Btw for livereload Naudoju tą, kuris ateina su ryšiu, kuris visada naudoja tą patį prievadą. Tikiuosi, kad tai jums tinka, mėgaukitės!

1
06 июня '16 в 13:10 2016-06-06 13:10 atsakymą pateikė Peteris Kottas birželio 16 d. 16 val. 13:10 2016-06-06 13:10

Įdiekite mazgą visame pasaulyje npm npm i -g nodemon

Ir pridėkite prie .bashrc (arba .bash_profile arba .profile) alias gulp='nodemon --watch gulpfile.js --watch gulpfile.babel.js --quiet --exitcrash --exec gulp'

Taip bus stebimi gulpfile.js ir gulpfile.babel.js failai (žr. „ Google“ )

ps tai gali būti naudinga begalinėms užduotims (pvz., žiūrėti, ...), bet ne vienkartinėms užduotims. Aš turiu galvoje, kad jis naudoja laikrodį, taigi jis tęs procesą net ir po to, kai bus baigtas gulp darbas;)

1
15 нояб. Atsakymą davė Davit Yavryan lapkričio 15 d. 2016-11-15 02:27 '16 at 14:27 pm 2016-11-15 02:27

Geras „Windows“ sprendimas, kuris taip pat gerai veikia su užduoties lyderiu „Visual Studio“.

 /// <binding ProjectOpened='auto-watchdog' /> const spawn = require('child-proc').spawn, configPaths = ['Gulpconfig.js', 'bundleconfig.js']; gulp.task('watchdog', function () { // TODO: add other watches here gulp.watch(configPaths, function () { process.exit(0); }); }); gulp.task('auto-watchdog', function () { let p = null; gulp.watch(configPaths, spawnChildren); spawnChildren(); function spawnChildren() { const args = ['watchdog', '--color']; // kill previous spawned process if (p) { // You might want to trigger a build as well args.unshift('build'); setTimeout(function () { p.kill(); }, 1000); } // `spawn` a child `gulp` process linked to the parent `stdio` p = spawn('gulp', args, { stdio: 'inherit' }); } }); 

Pagrindiniai pakeitimai, palyginti su kitais atsakymais:

  • Naudoja vaiko proc., Nes „Windows“ sistemoje nepavyksta vaiko_procesas.
  • Reguliatorius atsijungia nuo failo pakeitimų, nes „Windows“ sistemoje gulp skambinama į paketinį scenarijų. Nužudęs scenarijų paketą, jis nežudys gulpų, dėl kurių su laiku atsiras kelias valandas.
  • Konfigūruoti pokyčiams: Paprastai gulpfile keitimas taip pat garantuoja projekto atkūrimą.
1
25 янв. atsakymas, kurį pateikė Sebazzz 25 sausis 2017-01-25 20:48 '17, 08:48 pm 2017-01-25 20:48

Įdiekite gulp -restart

npm install gulp-restart

Šis kodas veiks jums.

var gulp = require('gulp'); var restart = require('gulp-restart');

gulp.task('watch', function() { gulp.watch(['gulpfile.js'], restart); })

jis bus iš naujo paleisti gulp, kur darysite pakeitimus faile gulpfile.js

0
25 сент. Dilakshan Sooriyanathan atsakymas, pateiktas rugsėjo 25 d. 2017-09-25 12:07 '17, 12:07 2017-09-25 12:07

Štai trumpas variantas, kurį lengva suprasti, kad galite nustatyti kaip numatytąjį užduotį, todėl jums reikia įvesti „gulp“:

 gulp.task('watch', function() { const restartingGulpProcessCmd = 'while true; do gulp watch2 --colors; done;'; const restartingGulpProcess = require('child_process').exec(restartingGulpProcessCmd); restartingGulpProcess.stdout.pipe(process.stdout); restartingGulpProcess.stderr.pipe(process.stderr); }); gulp.task('watch2', function() { gulp.watch(['config/**.js', 'webpack.config.js', './gulpfile.js'], () => { console.log('Config file changed. Quitting so gulp can be restarted.'); process.exit(); }); // Add your other watch and build commands here } gulp.task('default', ['watch']); 
0
26 авг. atsakymas pateikiamas 26 d. 2017-08-26 20:24 '17, 8:24 pm 2017-08-26 20:24

Kiti klausimai apie „ žymų arba Ask a Question