2012-01-07 35 views
7

Tôi đang làm việc để triển khai dịch vụ web nơi chúng tôi đang viết mã kết thúc trước của chúng tôi trong CoffeeScript. Các vấn đề tôi đã vấp phải là trong khi dự án đang phát triển chức năng phải được tách ra trong các tập tin khác nhau. Những gì tôi thực sự cần là một cấu trúc đơn giản, trong tập tin utils.coffee tôi sẽ có các chức năng chung được yêu cầu từ mọi trang và trên mỗi tệp riêng biệt, tôi sẽ có page_foo.coffeepage_bar.coffee các chức năng cụ thể. Làm thế nào tôi có thể cấu trúc nó đúng cách vì vậy tôi cũng đảm bảo tải utils.coffee đầu tiên và có thể truy cập từ tất cả mọi người?Tổ chức nhiều tệp CoffeeScript

+1

Điều này không dành riêng cho CoffeeScript, mà là vấn đề chung với JavaScript. Điều đó đang được nói ... xem ["Cấu trúc mã coffeescript?"] (Http://stackoverflow.com/questions/6150455/structuring-coffeescript-code), và cụ thể câu trả lời của tôi [ở đây] (http://stackoverflow.com/câu hỏi/6150455/structuring-coffeescript-code/8303780 # 8303780). – shesek

Trả lời

3

Bạn có thể kiểm tra cách thực hiện trong dự án gae-init (Tuyên bố từ chối trách nhiệm: Tôi là người sáng tạo).

Ý tưởng cơ bản là bạn có tất cả các tệp *.coffee trong một thư mục cụ thể, sau đó là tập lệnh xây dựng biên dịch tất cả các tệp và đặt chúng vào đúng đường dẫn.

Vì bạn muốn có thể gỡ lỗi dễ dàng, trong khi bạn đang phát triển nó, tập lệnh xây dựng nên có tùy chọn để biên dịch chúng và một tùy chọn khác để kết hợp & giảm thiểu chúng.

+0

Cảm ơn tôi đã thay đổi câu trả lời của tôi chỉ vì sự khiếp sợ của nó. Nó cung cấp không chỉ một cấu trúc tối ưu hóa hiệu suất cho cà phê mà còn là một công cụ tuyệt vời mà tôi thường sử dụng. – topless

+2

Tôi thậm chí không biết bạn có thể "không chấp nhận" một câu trả lời :) Bạn nên nhìn vào tiện ích [cake] (http://coffeescript.org/#cake) của CoffeeScript nếu bạn đi tuyến đường đó (một ngôn ngữ ít hơn trong ngăn xếp sau đó) –

+0

Đây là một ý tưởng hay, nhưng nó ngăn cản bạn có 2 tệp có cùng tên, như lượt xem/navItem và mô hình/navItem – dezman

5

Trình tự thực thi được tôn trọng trên trình duyệt, vì vậy chỉ cần bao gồm utils.js trước tiên.

Một công cụ như CodeKit (http://incident57.com/codekit/) có thể biên dịch và rút gọn + kết hợp tất cả các tệp .coffee của bạn thành một .js, cũng dễ dàng thực hiện với tập lệnh shell.

Nếu ứng dụng của bạn thực sự lớn, hãy đọc trên require.jsAsynchoronous Module Loading. Nó sẽ cho phép bạn quản lý phụ thuộc rất dễ dàng và chỉ tải những gì cần thiết:

# page_foo.coffee 
define ['lib/utils'], ($) -> 
    // code that uses 'utils' 
+0

+1 cho require.js - nó hoạt động thực sự tốt cho chúng tôi. – domenukk

2

Những gì tôi làm là viết một nhiệm vụ Bánh tham gia và biên dịch các file trong một chuỗi xác định trước, ví dụ

task 'build', 'join and compile *.coffee files', -> 
    exec "coffee -j #{outJS}.js -C#{strFiles}", exerr 

trong đó outJS là tên tệp mà tôi muốn JavaScript được biên dịch và strFiles là một chuỗi tên tệp

Ngoài ra, bạn có thể thêm nhiệm vụ để rút gọn mã được biên dịch bằng YUICompressor hoặc công cụ yêu thích của bạn. Và trong ngắm phát triển, tham gia, biên soạn cũng có thể được tự động

task 'watch', 'watch and compile changes in source dir', -> 
    watch = exec "coffee -j #{outJS}.js -cw #{strFiles}" 
    watch.stdout.on 'data', (data)-> process.stdout.write data 

Có một cái nhìn tại this gist

7

Với CoffeeToaster bạn có khả năng để bao gồm tập tin mà bạn sẽ cần phải ở trên cùng của họ, đảm bảo tệp ".js" cuối cùng của bạn (cũng sẽ là một tập hợp tất cả các tệp CoffeeScript của bạn) có mọi thứ theo đúng thứ tự, để sử dụng bên trong trình duyệt.

Hãy xem trên các tài liệu:
http://github.com/serpentem/coffee-toaster

Nó cũng đi kèm với một hệ thống bao bì mà khi được kích hoạt sẽ sử dụng hệ thống phân cấp của thư mục của bạn là không gian tên tờ khai đến các lớp học của bạn nếu bạn muốn như vậy, sau đó bạn có thể mở rộng các lớp học từ nhiều file, làm nhập khẩu và con trai, chẳng hạn như như:

#<< another/package/myclass 
class SomeClass extends another.package.MyClass 

cấu hình xây dựng là cực kỳ nhỏ gọn:

# => SRC FOLDER 
toast 'src_folder' 
    # => VENDORS (optional) 
    # vendors: ['vendors/x.js', 'vendors/y.js', ... ] 

    # => OPTIONS (optional, default values listed) 
    # bare: false 
    # packaging: true 
    # expose: '' 
    # minify: false 

    # => HTTPFOLDER (optional), RELEASE/DEBUG (required) 
    httpfolder: 'js' 
    release: 'www/js/app.js' 
    debug: 'www/js/app-debug.js' 

Thậm chí còn có một tùy chọn gỡ lỗi biên dịch các tệp riêng lẻ để dễ dàng gỡ rối các quy trình và một tính năng hữu ích khác.

+0

Làm cách nào để hiển thị một vùng tên phức tạp, ví dụ: acme.sales.admin để đây có phải là thư mục gốc cho ứng dụng của tôi không? –

+0

Bạn tạo các thư mục này một bên trong nhau và đặt các tệp của bạn bên trong "acme/sales/admin/yourfile.coffee". –

+0

CoffeeToaster đã được [ngưng] (https://github.com/arboleya/coffee-toaster/wiki) và được chia thành một dự án mới, [Polvo] (https://github.com/polvo/polvo). –