i have nodejs app running gulp script. gulp started forever.
forever start gulp when exception thrown, gets freezed below error msg.
[gulp] [nodemon] app crashed - waiting file changes before starting... here exception know there no file change required, caused connection timeout event.
so, forever + gulp + nodejs
can automatically restart gulp script on exception? suggestions helpful.
update 1:
gulp script
var fs = require('fs'), path = require('path'), gulp = require('gulp'), gutil = require('gulp-util'), es = require('event-stream'), concat = require('gulp-concat'), runsequence = require('gulp-run-sequence'), templatecache = require('gulp-angular-templatecache'), minifyhtml = require('gulp-minify-html'), ngmin = require('gulp-ngmin'), less = require('gulp-less'), rimraf = require('gulp-rimraf'), jshint = require('gulp-jshint'), stylish = require('jshint-stylish'), uglify = require('gulp-uglify'), minifycss = require('gulp-minify-css'), gulpif = require('gulp-if'), nodemon = require('gulp-nodemon'), _ = require('lodash'), moment = require('moment'), shell = require('gulp-shell'), minimist = require('minimist'), rename = require('gulp-rename'); var base = 'src/client/app', assets_base = 'src/client/assets' var appfiles = applyprefix(base, ['/entry/app.js', '/**/*.js']), templatefiles = applyprefix(base, ['/**/*.html']), lessfiles = applyprefix(base, ['/entry/less/main.less', '/**/*.less']), adminless = applyprefix(base, ['/entry/less/admin.less']), libfiles = applyprefix(assets_base, ['/js/lib/jquery.min.js', '/js/lib/lodash.min.js', '/js/lib/angular.min.js', '/js/lib/**/*.js', '/js/components/**/*.js']), assetfiles = applyprefix(assets_base, ['/fonts/**/*', '/img/**/*', '/translations/**/*', '/favicon.ico']), viewsfiles = applyprefix(base, ['/entry/views/*.html']); var compile = gutil.env.compile; gulp.task('default', function(cb) { runsequence( 'clean', ['scripts', 'assets', 'less', 'adminless', 'views'], 'watch', cb ); }); gulp.task('clean', function() { return gulp.src('src/server/public', { read: false }) .pipe(rimraf()); }); gulp.task('scripts', function() { gulp.src(['src/server/public/js/*main.js', 'src/server/public/js/*lib.js', 'src/server/public/js/*templates.js'], { read: false }) .pipe(rimraf()); var buildtimestamp = moment().format("mm-d-yyyy-hh:mm:ss"); fs.writefile('src/server/js-build-timestamp.json', json.stringify({ buildtimestamp: buildtimestamp }), function(err) { if (err) return console.log("could not create js-build-timestamp file"); console.log("created js-build-timestamp file: " + buildtimestamp); }); // app files gulp.src(appfiles) .pipe(jshint({ strict: false, laxbreak: true, debug: true, globals: { angular: true, $: true, _: true } })) .pipe(jshint.reporter(stylish)) .pipe(concat(buildtimestamp + '-main.js')) .pipe(gulpif(compile, ngmin())) .pipe(gulpif(compile, uglify())) .pipe(gulp.dest('src/server/public/js')); // template files gulp.src(templatefiles) .pipe(minifyhtml({ empty: true, spare: true, quotes: true })) .pipe(templatecache({ module: 'xxxprojname', root: '', base: function(file) { return 'templates/' + path.basename(file.relative); } })) .pipe(concat(buildtimestamp + '-templates.js')) .pipe(gulpif(compile, ngmin())) .pipe(gulpif(compile, uglify())) .pipe(gulp.dest('src/server/public/js')); // library files gulp.src(libfiles) .pipe(concat(buildtimestamp + '-lib.js')) .pipe(gulpif(compile, uglify({ preservecomments: 'some' }))) .pipe(gulp.dest('src/server/public/js')); }); gulp.task('less', function() { gulp.src(['src/server/public/css/*.css'], { read: false }) .pipe(rimraf()); var buildtimestamp = moment().format("mm-d-yyyy-hh:mm:ss"); fs.writefile('src/server/css-build-timestamp.json', json.stringify({ buildtimestamp: buildtimestamp }), function(err) { if (err) return console.log("could not create css-build-timestamp file"); console.log("created css-build-timestamp file: " + buildtimestamp); }); gulp.src(lessfiles[0]) .pipe(less()) .pipe(rename(buildtimestamp + '-main.css')) .pipe(gulpif(compile, minifycss())) .pipe(gulp.dest('src/server/public/css')); }); gulp.task('adminless', function() { gulp.src(adminless) .pipe(less()) .pipe(gulpif(compile, minifycss())) .pipe(gulp.dest('src/server/public/css')); }); gulp.task('assets', function() { gulp.src(assetfiles, { base: assets_base}) .pipe(gulp.dest('src/server/public/')); }); gulp.task('views', function() { gulp.src(viewsfiles) .pipe(gulp.dest('src/server/views/')); }); gulp.task('watch', function() { if (compile) return; gulp.watch([appfiles, templatefiles, libfiles], ['scripts']); gulp.watch(['client/index.html', assetfiles], ['assets']); gulp.watch([lessfiles], ['less', 'adminless']); gulp.watch([viewsfiles], ['views']); nodemon({ script: 'src/server/server.js', watch: 'src/server', ext: 'json js', ignore: ['client/*, src/server/public/*'] }); }); function applyprefix(prefix, filenames) { return _.map(filenames, function(filename) { return prefix + filename; }); } gulp.task('bleh', function() { gulp.src('') .pipe(shell([ 'touch test' ])) });
install nodemon globally npm -g nodemon
and add in .bashrc (or .bash_profile or .profile) alias alias gulp='nodemon --watch gulpfile.js --watch gulpfile.babel.js --quiet --exec gulp'
this watch file gulpfile.js , gulpfile.babel.js (see google) changes
p.s. can helpful endless tasks (like watch, ...) not single run tasks. mean uses watch continue process after gulp task done. ;) p.s.2. nodemon has flag exit on crash it's --exitcrash. don't include :)
Comments
Post a Comment