2011-12-23 37 views
5

Tôi đang sử dụng coffeescript với tùy chọn --watch để xây dựng lại javascript về các thay đổi đối với tệp .coffee.Coffeescript và node-supervisor với nhau?

Có an toàn khi kết hợp điều đó với nút giám sát để khởi động lại nút trên các thay đổi đối với javascript được biên dịch không?

Tôi lo lắng nó sẽ không mạnh mẽ vì tính nguyên tử khi coffeescript được biên dịch lại nhiều tệp. nút-giám sát viên có thể nhảy súng và khởi động lại nút trên phát hiện thay đổi hệ thống tập tin đầu tiên. Có đủ mạnh để nhận ra có những thay đổi bổ sung trong khi nó đang bận khởi động lại nút không?

Có cách nào tốt hơn không? Lý tưởng nhất là tôi chỉ có một trình xem hệ thống tập tin biên dịch lại nút coffeescript và nút khởi động lại của tôi.

+0

Làm thế nào để bạn xem tệp cà phê đệ quy?có lẽ bạn có thể cho tôi ahand với câu hỏi này: http://stackoverflow.com/questions/15470334/autocompile-coffee-files-and-reload-project – opensas

Trả lời

6

Bạn có thể sử dụng nodemon, nó thậm chí còn có một tính năng chậm trễ (để khởi động lại máy chủ sau một số giây đã trôi qua), ví dụ:

nodemon --debug ./server.coffee 80 

Một tính năng tốt của nodemon được bỏ qua tác phẩm, ví dụ:

# 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 

khác hơn thế, đọc tài liệu trên github repo và xem này Nodetuts video về nodemon: http://nodetuts.com/tutorials/14-some-nodejs-tools.html

+0

Cảm ơn, tôi không biết về chức năng trì hoãn. Tôi sẽ chơi với nó. – Nils

+0

Lưu ý rằng theo mặc định nodemon bỏ qua các tệp .coffee ngoại trừ tệp ứng dụng được chỉ định. Vì vậy, nếu bạn không biên dịch trước các tệp .coffee của mình, bạn sẽ gặp sự cố. Tôi đã giải quyết nó bằng cách thêm tệp .nodemonignore vào dự án gốc, nó ghi lại các quy tắc mặc định và nodemon bắt đầu xem tất cả các tệp .coffee bắt buộc – Nayjest

+0

Tôi phải thêm trước --nodejs trước --debug để làm việc này với coffeescript: nodemon - nodejs --debug ./server.coffee – cbaigorri

1

Trong một số Cakefiles của tôi, chẳng hạn như một cho connect-assets, tôi làm theo dõi bản thân mình và chỉ sinh ra coffee -co lib src mỗi lần thay đổi, sau đó khởi động lại máy chủ khi quá trình con đó kết thúc. Điều đó xoay quanh vấn đề nguyên tử. Nếu mỗi .coffee thay đổi tệp cùng một lúc (hoặc nếu bạn nâng cấp thời gian chạy là coffee), tất cả các tệp JS sẽ cập nhật cùng một lúc.

+0

Tuyệt vời! Tôi thậm chí không hoàn toàn hiểu rõ về bánh của bạn. Nhưng đó là một ý tưởng hay. – Nils

7

Tạo một launcher JavaScript, ví dụ: run.js, như thế này:

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

Sau đó chạy tập tin này với người giám sát và phù hợp lựa chọn:

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

này đã làm việc tốt cho tôi trên Windows.

+0

+1 cũng hoạt động trên OSX Lion –

+0

Không cần tạo tệp js riêng biệt. Bạn có thể chỉ định thực thi với tùy chọn '-x'. Xem [câu trả lời của tôi] (http://stackoverflow.com/a/18373394/93988). –

0

giải pháp trung tâm quản đốc của tôi trông như thế này:

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 

và sau đó chỉ đơn thuần là foreman start -f Procfile.dev

Sau đó gitignore kết quả .js tập tin. Tôi thích cách tiếp cận này vì nó giữ một tệp JS vanilla liên tục cập nhật cùng với các tệp .iced của tôi, vì vậy tôi có thể kiểm tra lại công việc của mình khi tôi đi (tôi chắc chắn mắc lỗi trong coffeescript mà tôi có thể không có trong vanilla).

+0

điều này thật tuyệt, nhưng dường như tôi không thể chạy nút giám sát bằng '--debug' – wprater

4

Bạn có thể sử dụng supervisor với tùy chọn -x được đặt thành coffee. Điều này sẽ cho phép ứng dụng chạy tập lệnh có thể thực thi đúng:

supervisor -x coffee your-script.coffee 

Lấy cảm hứng từ Lemming's answer.

Các vấn đề liên quan