2012-07-08 11 views
5

¿Hay alguna forma de definir el orden de compilación de CoffeeScript en los subdirectorios? Por favor, considere el siguiente ejemplo:CoffeeScript - orden de compilación en subdirectorios

Archivos:

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

donde la clase A se extiende B.

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

Esto arroja un error en el navegador:

Uncaught TypeError: Cannot read property 'prototype' of undefined 

Si cambio el nombre de la carpeta un a z, el error se ha ido y todo funciona bien.

  • src/view/z /A.coffee

yo esperaría que el compilador para leer todos los archivos de .coffee src/view/antes de entrar en src/view/subdirectorios . De nuevo, ¿hay alguna manera de hacer eso?

Editar: PC con Windows 7, CoffeeScript versión 1.3.3

+0

Esto es un resultado del comportamiento estándar * nix, donde todo está en orden alfabético, incluidas las carpetas. Pruebe '--compile src/view/B.coffee src/view/a/src/App.coffee'? –

+0

Funciona solo si agrego todos los archivos src/view/[. Coffee] luego todo src/view/[folders].No funciona con src/view/ – imbrizi

+0

genérico '--compile src/view/*. Coffee src/view/a/src/App.coffee' trabajado para mí –

Respuesta

5

La única solución que creo que es para crear el orden de compilación manualmente dentro de un script de construcción. Debería crear una colección ordenada con nombres de archivo, mientras que el ciclo itera y concatena una nueva cadena grande, que se puede compilar como un solo archivo.

Cree un Cakefile con el siguiente contenido, verifique primero la sintaxis. Y ejecutar con cake build. Eso debería funcionar, Cake viene con 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' 

documentada también en Wiki de CoffeeScript https://github.com/jashkenas/coffee-script/wiki/[HowTo]-Compiling-and-Setting-Up-Build-Tools

Antes del primer bucle también se puede hacer a través del bucle diferentes directorios. Y simplemente liste los nombres de archivo en coffeeFiles para ser procesados ​​antes que los otros no en la lista y el resto podría agregarse a la lista con fs.readDir().

2

Hemos creado un módulo simple de resolver un problema similar:

https://github.com/Vizir/rehab

sólo hay que poner #_require [filename].coffee en su archivo y ya está.

Lo estamos utilizando en producciones con gráficos de dependencia complejos.

Cuestiones relacionadas