Finom
@Finom

Как подружить node-babel и forever?

Занимаюсь клиентской разработкой и решил, что пора бы освоить ноду. Пишу в основном на ES7 (babel --stage=0), так что пересаживаться на "старый" JS сосем неохота.

Проблема в том, что я не понимаю, как мне использовать forever вместе с node-babel.

forever -w -c "babel-node" app.js

Скрипт выполняется замечательно, в консоль пишется то, что нужно. Но после того, как я меняю скрипт, вылазит ошибка:
events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: listen EADDRINUSE
    at exports._errnoException (util.js:746:11)
    at Server._listen2 (net.js:1156:14)
    at listen (net.js:1182:10)
    at Server.listen (net.js:1267:5)
    at EventEmitter.listen (/home/finom/Dropbox/Public/sync/ag/my/tests/matreshka_website_node/node_modules/express/lib/application.js:617:24)
    at Object.<anonymous> (/home/finom/Dropbox/Public/sync/ag/my/tests/matreshka_website_node/app.js:28:5)
    at Module._compile (module.js:460:26)
    at normalLoader (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:199:5)
    at Object.require.extensions.(anonymous function) [as .js] (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:216:7)
    at Module.load (module.js:355:32)
error: Forever detected script exited with code: 1


ЧЯДНТ?

Гугл говорит, что такая ощибка появляется, когда нода пытается заюзать порт, который уже используется. Но я не пойму, как эту проблему решить.
  • Вопрос задан
  • 817 просмотров
Решения вопроса 1
Finom
@Finom Автор вопроса
Сам спросил, сам ответил. Вместо использования babel-node нужно использовать обычный node, который в файле инициализации приложения вызывает.

require('babel/register');
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Вы знаете для чего нужен forever?

A simple CLI tool for ensuring that a given script runs continuously (i.e. forever).


Это значит, что вы запустили ваш скрипт app.js, который слушает какой-то порт (занял его), потом (судя по всему) пытаетесь запустить еще один скрипт, который пытается подключится к этому же порту и получаете ошибку - адрес (порт) уже занят.

Убейте предыдущий скрипт, а потом уже запускайте новый.
Ответ написан
Комментировать
BondDen
@BondDen
Если правильно понял Вашу проблему, то рекомендую познакомиться с gulp.

gulpfile.js в Вашем случае может выглядеть, например, так:

var gulp   =require('gulp'),
    util   =require('gulp-util'),
    changed=require('gulp-changed'),
    rename =require('gulp-rename'),
    babel  =require('gulp-babel'),
    plumber=require('gulp-plumber'),
    path   =require('path')
;
var d      ={
	js  :{
		src  :'src/*.es7.js',
		dst  :'./'
	}
};

gulp.task('js',function(){
	return gulp.src(d.js.src)
		.pipe(plumber())
		.pipe(changed(d.js.dst))
		.pipe(babel({stage:0}))
		.pipe(rename(function(path){
			path.basename=path.basename.replace('.es7','');
		}))
		.pipe(gulp.dest(d.js.dst));
});

gulp.task('watch',function(){
	gulp.watch(d.js.src,['js']);
});

gulp.task('default',['watch','js']);


модуль plumber здесь используется, как раз, для обеспечения беспрерывной работы компилятора.
а метод gulp.watch отслеживает изменения файлов в реальном времени.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы