2012-07-08 18 views
5

Czy istnieje sposób definiowania kolejności kompilacji programu CoffeeScript w podkatalogach? Proszę rozważyć następujący przykład:CoffeeScript - kolejność kompilacji w podkatalogach

pliki:

  • src/App.coffee
  • src/view/B.coffee
  • src/view/a/A.coffee

Gdzie klasa A sięga B.

coffee --join js/app.js --compile src/view/ src/App.coffee 

to zgłasza błąd w przeglądarce:

Uncaught TypeError: Cannot read property 'prototype' of undefined 

Gdybym zmienić nazwę folderu do oo, błąd zniknął i wszystko działa poprawnie.

  • src/view/oo /A.coffee

spodziewałbym kompilator czytać wszystkie pliki .coffee z src/view/zanim przejdzie w src/view/podkatalogów . Znowu, jest jakikolwiek sposób to zrobić?

Edit: PC Windows 7, wersja 1.3.3 coffeescript

+0

Jest to wynik standardowego zachowania * nix, w którym wszystko jest wymienione alfabetycznie, łącznie z folderami. Wypróbuj '--compr. Src/view/B.coffee src/view/a/src/App.coffee'? –

+0

Działa tylko wtedy, gdy dodaję wszystkie pliki src/view/[. Coffee], a następnie wszystkie src/view/[folders].Nie działa z generycznym src/view/ – imbrizi

+0

'--comprile src/view/*. Coffee src/view/a/src/App.coffee' pracował dla mnie –

Odpowiedz

5

Jedynym rozwiązaniem wydaje mi się, aby ręcznie tworzyć kolejność kompilacji w skrypcie kompilacji. Utworzono by uporządkowaną kolekcję z nazwami plików, gdzie jako pętla iteruje i łączy nowy duży ciąg, który można skompilować jako jeden plik.

Utwórz plik Cakefile z następującą treścią, najpierw sprawdź składnię. I uruchom z cake build. To powinno zadziałać, ciasto jest dostarczane z CoffeeScript.

fs = require 'fs' 
{exec} = require 'child_process' 

viewsDir = "src/view" 
coffeeFiles = [ 
    'B' 
    'A' 
] 

task 'build' 
    # loops through coffeeFiles. 
    for file, index in coffeeFiles then do (file, index) -> 
    fs.readFile "#{viewsDir}/#{file}", 'utf8', (err, content) -> 
     appCoffee[index] = content 
     compile() if --remaining is 0 

    compile = -> 
    fs.writeFile 'js/app.coffee', appCoffee.join('\n\n'), 'utf8', (err) -> 
     throw err if err 
     exec 'coffee --compile js/app.coffee', (err, stdout, stderr) -> 
     throw err if err 
      console.log stdout + stderr 

      # you can skip deleting the app.coffee file 
      fs.unlink 'js/app.coffee', (err) -> 
      throw err if err 
      console.log 'Created app.coffe, compiled to app.js and removes app.coffee' 

      # maybe additional taks 
      # invoke 'test' 

Udokumentowane także w encyklopedii z coffeescript https://github.com/jashkenas/coffee-script/wiki/[HowTo]-Compiling-and-Setting-Up-Build-Tools

Przed pierwszej pętli można też uczynić go pętlę przez różnych katalogach. I po prostu wypisz nazwy plików w plikach kawy do przetworzenia, zanim pozostałe nie zostaną wymienione, a resztę można dodać do listy za pomocą fs.readDir().

2

Stworzyliśmy prosty moduł rozwiązać podobny problem:

https://github.com/Vizir/rehab

Wystarczy umieścić #_require [filename].coffee na plik i gotowe.

Używamy go w produkcjach ze złożonymi wykresami zależności.

Powiązane problemy