2011-01-01 17 views
10

Mam kilka plików .coffee, które muszę dołączyć do jednego pliku.Dołącz wiele plików Coffeescript do jednego pliku? (Wiele podkatalogów)

mam foldery skonfigurowane jak app szyn:

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

coffeescript ma polecenie, które pozwala połączyć wiele coffeescripts w jednym pliku, ale wydaje się tylko do pracy z jednym katalogu. Na przykład to działa prawidłowo:

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

Ale muszę być w stanie zawierać kilka podkatalogów tak jakby tego nieprodukcyjnym polecenia:

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

Czy istnieje sposób, aby to zrobić? Czy istnieje sposób UNIXy do przekazania na liście wszystkich plików w podkatalogach?

Używam terminala w systemie OSX.

Wszystkie one muszą być połączone w jeden plik, bo inaczej każdy oddzielny plik zostanie skompilowany & zawijane z tym:

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

który rozkłada zakresu pewnych wywołań funkcji.

Odpowiedz

7

Można napisać skrypt powłoki lub zadanie Rake, aby je najpierw połączyć, a następnie skompilować. Coś jak:

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

Następnie skompilować output.coffee

dostosowania ścieżek do swoich potrzeb. Upewnij się także, że plik output.coffee nie znajduje się na tej samej ścieżce, którą szukasz, z find lub dostaniesz się w nieskończoną pętlę.

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

Dodatkowo może być zainteresowany w innych postach na StackOverflow dotycząca poszukiwań całej katalogach:

0

Alternatywnie, można użyć --bare flaga, kompilacja do JavaScript, an może wtedy owinąć JS, jeśli to konieczne. Ale to prawdopodobnie spowodowałoby problemy; Na przykład, jeśli masz jeden plik z kodem

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

wówczas istnieje tylko jedna var i deklaracja w otrzymanej JavaScript i i zostanie zwiększony. Ale jeśli przeniesiesz deklarację funkcji foo do innego pliku CoffeeScript, to jego i będzie działać w zasięgu foo, a zewnętrzna i nie będzie miała wpływu.

Łączenie kodu CoffeeScript jest mądrzejszym rozwiązaniem, ale nadal istnieje możliwość wprowadzenia w błąd; kolejność, w której łączysz swój kod, prawie na pewno ma znaczenie. Gorąco polecam modularyzację Twojego kodu.

28

Z CoffeeScript documentation:

-j, --join [PLIK]: Przed kompilacją, złączyć wszystkie skrypty razem w kolejności, w jakiej zostały przekazane, i zapisać je w określonym pliku. Przydatny do budowania dużych projektów.

Tak, można osiągnąć swój cel w wierszu poleceń (Używam bash) jak to:

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

gdzie plik1 - plikN są ścieżki do coffeescript plików, które chcesz skompilować.

+0

To nie jest chyba najlepszy pomysł, aby z tego skorzystać, zwłaszcza jeśli zamierzasz używać go w skrypcie lub czymś, ponieważ jest przestarzały i zostanie usunięty w przyszłej wersji – Zac

1

Użyj cake, aby skompilować je wszystkie w jednym (lub więcej) wynikowym pliku .js (s). Cakefile jest używany jako konfiguracja, która kontroluje, w jakiej kolejności są kompilowane skrypty do kawy - całkiem poręczna przy większych projektach.

Ciasto jest dość łatwy w instalacji i konfiguracji, powołując się na ciasto z vim podczas edytowania projektu jest po prostu

:!cake build 

i można odświeżyć przeglądarkę i zobaczyć wyniki.

Ponieważ jestem również zajęty, aby nauczyć się najlepszego sposobu strukturyzowania plików i korzystania z coffeescript w połączeniu ze szkieletem i ciastem, utworzyłem small project on github, aby zachować go jako punkt odniesienia dla siebie, może to też pomoże tobie ciasto i kilka podstawowych rzeczy. Wszystkie skompilowane pliki są w folderze www, dzięki czemu można je otworzyć w przeglądarce, a wszystkie pliki źródłowe (z wyjątkiem konfiguracji ciasta) znajdują się w folderze src. W tym przykładzie wszystkie pliki .coffee są kompilowane i łączone w wyjściowym pliku .js , który jest następnie dołączany do html.

2

Najprostszym sposobem użycia narzędzia linii poleceń do kawy.

kawa --output --join publicznego --compile aplikacji

aplikacja jest mój katalog roboczy trzyma kilka podkatalogów i opinii publicznej, gdzie ~ output.js plik zostanie umieszczony. Łatwo zautomatyzować ten proces, jeśli pisanie aplikacji w nodejs

2

To pomogło mi (-o katalog wyjściowy, -j dołączyć do project.js, -cw kompilacji i oglądać coffeescript katalog w pełnej głębokości):

coffee -o web/js -j project.js -cw coffeescript 
Powiązane problemy