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.coffee
page_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
Trả lời
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.
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
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 đó) –
Đâ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
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.js và Asynchoronous 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'
+1 cho require.js - nó hoạt động thực sự tốt cho chúng tôi. – domenukk
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
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.
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? –
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". –
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). –
Đ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