2011-01-01 36 views
10

Tôi có một loạt các tệp .coffee mà tôi cần tham gia vào một tệp.Tham gia nhiều tệp Coffeescript vào một tệp? (Nhiều thư mục con)

Tôi có thư mục thiết lập như một ứng dụng ray:

/src/controller/log_controller.coffee 
/src/model/log.coffee 
/src/views/logs/new.coffee 

Coffeescript có một lệnh cho phép bạn tham gia nhiều coffeescripts vào một tập tin, nhưng nó dường như chỉ để làm việc với một thư mục. Ví dụ này hoạt động tốt:

coffee --output app/controllers.js --join --compile src/controllers/*.coffee 

Nhưng tôi cần để có thể bao gồm một loạt các thư mục con giống như không làm việc lệnh này:

coffee --output app/all.js --join --compile src/*/*.coffee 

Có cách nào để làm điều này? Có một cách UNIXy để vượt qua trong một danh sách của tất cả các tập tin trong thư mục con?

Tôi đang sử dụng thiết bị đầu cuối trong OSX.

Tất cả đều phải được tham gia vào một tập tin bởi vì nếu mỗi file riêng biệt được biên soạn & bọc với điều này:

(function() { }).call(this); 

nào phá vỡ phạm vi của một số cuộc gọi chức năng.

Trả lời

7

Bạn có thể viết tập lệnh shell hoặc tác vụ Rake để kết hợp chúng lại với nhau trước, sau đó biên dịch. Một cái gì đó như:

find . -type f -name '*.coffee' -print0 | xargs -0 cat > output.coffee

Sau đó biên dịch output.coffee

Điều chỉnh các đường dẫn đến nhu cầu của bạn. Ngoài ra hãy đảm bảo rằng tệp output.coffee không nằm trong cùng một đường dẫn bạn đang tìm kiếm với find hoặc bạn sẽ nhận được vào một vòng lặp vô hạn.

http://man.cx/find | http://www.rubyrake.org/tutorial/index.html

Ngoài ra bạn có thể quan tâm đến những bài viết khác trên Stackoverflow liên quan đến tìm kiếm trên thư mục:

0

Ngoài ra, bạn có thể sử dụng --bare cờ, biên dịch sang JavaScript, một d sau đó có lẽ quấn JS nếu cần thiết. Nhưng điều này có thể sẽ tạo ra vấn đề; Ví dụ, nếu bạn có một tập tin với mã

i = 0 
foo = -> i++ 
... 
foo() 

sau đó chỉ có một var i khai trong kết quả JavaScript, và i sẽ được tăng lên. Nhưng nếu bạn đã chuyển tờ khai chức năng foo sang một tệp CoffeeScript khác thì i của nó sẽ nằm trong phạm vi foo và bên ngoài i sẽ không bị ảnh hưởng.

Vì vậy, ghép nối CoffeeScript là một giải pháp khôn ngoan hơn, nhưng vẫn có tiềm năng gây nhầm lẫn ở đó; thứ tự mà bạn liên kết mã của bạn gần như chắc chắn sẽ trở thành vấn đề. Tôi khuyên bạn nên mô-đun hóa mã của bạn để thay thế.

28

Từ CoffeeScript documentation:

-j, --join [FILE]: Trước khi biên dịch, nối tất cả các kịch bản cùng nhau theo thứ tự họ đã trôi qua, và viết chúng vào một file nào đó. Hữu ích cho việc xây dựng các dự án lớn.

Vì vậy, bạn có thể đạt được mục tiêu của bạn tại cửa sổ dòng lệnh (tôi sử dụng bash) như thế này:

coffee -cj path/to/compiled/file.js file1 file2 file3 file4 

nơi file1 - fileN là các đường dẫn đến các tập tin coffeescript bạn muốn biên dịch.

+0

Đó là lẽ không phải là ý tưởng tốt nhất để sử dụng điều này, đặc biệt là nếu bạn đang sử dụng nó trong một kịch bản hoặc một cái gì đó bởi vì nó không được chấp nhận và sẽ bị loại bỏ trong một phiên bản tương lai – Zac

1

Sử dụng cake để biên dịch tất cả trong một (hoặc nhiều) tệp .js kết quả. Cakefile được sử dụng như cấu hình để kiểm soát thứ tự các tập lệnh cà phê của bạn được biên dịch - khá tiện dụng với các dự án lớn hơn.

Cake là khá dễ dàng để cài đặt và thiết lập, cách gọi bánh từ vim trong khi bạn đang chỉnh sửa dự án của bạn là sau đó chỉ cần

:!cake build 

và bạn có thể làm mới trình duyệt của bạn và xem kết quả.

Vì tôi cũng đang bận học cách tốt nhất để cấu trúc các tệp và sử dụng coffeescript kết hợp với xương sống và bánh, tôi đã tạo ra một small project on github để giữ nó làm tài liệu tham khảo cho bản thân, có thể nó sẽ giúp bạn bánh và một số thứ cơ bản. Tất cả các tệp được biên soạn nằm trong thư mục www để bạn có thể mở chúng trong trình duyệt của mình và tất cả các tệp nguồn (ngoại trừ cấu hình bánh) nằm trong thư mục src. Trong ví dụ này, tất cả các tệp .coffee được biên dịch và kết hợp trong một tệp .js đầu ra sau đó được đưa vào html.

2

Cách dễ nhất để sử dụng công cụ dòng lệnh cà phê.

cà phê --output --join công --compile ứng dụng

ứng dụng là thư mục làm việc của tôi giữ nhiều thư mục con và công cộng là nơi ~ tập tin output.js sẽ được đặt. Dễ dàng để tự động hóa quá trình này nếu viết ứng dụng trong nodejs

2

này đã giúp tôi (-o thư mục đầu ra, -j tham gia để project.js, -cw biên dịch và xem thư mục coffeescript đầy đủ chiều sâu):

coffee -o web/js -j project.js -cw coffeescript 
Các vấn đề liên quan