2011-12-23 20 views
5

Używam coffeescript z opcją --watch, aby odbudować javascript na zmiany plików .coffee.Coffeescript i superwyzytor razem?

Czy można bezpiecznie połączyć to z superwizorem węzła, aby ponownie uruchomić węzeł po zmianach w skompilowanym javascript?

Martwię się, że nie będzie solidne z powodu atomowości, gdy coffeescript rekompiluje wiele plików. superwizor węzłów może przeskoczyć działo i ponownie uruchomić węzeł po wykryciu pierwszej zmiany systemu plików. Czy jest wystarczająco silny, aby zdać sobie sprawę, że wprowadzono dodatkowe zmiany, gdy był zajęty restartem węzła?

Czy istnieje lepszy sposób? Idealnie byłoby mieć tylko jednego watcher systemu plików rekompilacji mój coffeescript i węzeł restartu.

+0

Jak można oglądać pliki kawy rekursywnie?może mógłbyś mi dać z tym pytanie: http://stackoverflow.com/questions/15470334/autocompile-coffee-files-and-reload-project – opensas

Odpowiedz

6

Można użyć nodemon, to nawet ma funkcję opóźnienia (do ponownego uruchomienia serwera po kilka sekund minęło), na przykład:

nodemon --debug ./server.coffee 80 

Kolejną dobrą cechą nodemon ignoruje pliki, przykład:

# this is my ignore file with a nice comment at the top 

/vendor/*  # ignore all external submodules 
/public/*  # static files 
./README.md # a specific file 
*.css   # ignore any CSS files too 

Poza tym, zapoznać się z dokumentacją na github repo i obejrzeć film o tym Nodetuts nodemon: http://nodetuts.com/tutorials/14-some-nodejs-tools.html

+0

Dzięki, nie wiedziałem o funkcji opóźnienia. Będę się z tym bawić. – Nils

+0

Należy pamiętać, że nodemon domyślnie ignoruje pliki plików .coffee wyjątek określonego pliku aplikacji. Więc jeśli nie prekompilujesz plików .coffee, będziesz miał problem. Rozwiązałem go, dodając plik .nodemonignore do projektu root, przepisuje on domyślne reguły i nodemon zaczął oglądać wszystkie wymagane pliki .coffee – Nayjest

+0

Musiałem przedłożyć --nodejs przed --debug, aby to działało z coffeescript: nodemon - nodejs --debug ./server.coffee – cbaigorri

1

W niektórych moich plikach cookie, takich jak ten dla connect-assets, robię to sam i po prostu odradzam coffee -co lib src za każdym razem, gdy coś się zmienia, a następnie restartuję serwer po zakończeniu tego procesu potomnego. To rozwiązuje problem atomowości. Jeśli każdy plik .coffee zmieni się od razu (lub jeśli zaktualizujesz środowisko wykonawcze coffee), wszystkie pliki JS zostaną zaktualizowane jednocześnie.

+0

Nice! Jeszcze nie w pełni rozumiem twojego pliku cookie. Ale to wygląda na dobry pomysł. – Nils

7

Utwórz wyrzutni JavaScript, tj run.js, tak:

require('coffee-script'); 
require('./launch'); 

Następnie należy uruchomić ten plik z opcjami administratora i odpowiednio:

supervisor -e "node|js|coffee" run.js 

Ten pracował dobrze dla mnie na Windows.

+0

+1 działa również na OSX Lion –

+0

Nie trzeba tworzyć osobnego pliku js. Możesz określić plik wykonywalny z opcją '-x'. Zobacz [moja odpowiedź] (http://stackoverflow.com/a/18373394/93988). –

0

Mój majster rozwiązanie centric wygląda następująco:

Procfile.dev

web: ./node_modules/supervisor/lib/cli-wrapper.js -n exit server.js 
watch: ./node_modules/iced-coffee-script/bin/coffee --watch --compile server.iced 

a następnie jedynie foreman start -f Procfile.dev

Następnie gitignore wynikające .js plików. Podoba mi się to podejście, ponieważ zachowuje stale aktualizowany plik JS vanilla obok moich plików .iced, dzięki czemu mogę podwoić swoją pracę, gdy idę (zdecydowanie robię błędy w coffeescript, że nie w wanilii).

+0

to jest świetne, ale nie mogę uruchomić węzła-nadzorcy z '--debug' – wprater

4

Można użyć opcji supervisor z opcją -x ustawioną na coffee. Pozwoli to, aby uruchomić skrypt z prawej wykonywalnego:

supervisor -x coffee your-script.coffee 

Zainspirowany Lemming's answer.