2011-01-01 25 views
10

Tengo un montón de archivos .coffee que necesito unir en un archivo.Unir múltiples archivos Coffeescript en un archivo? (Varios subdirectorios)

tengo carpetas creados como una aplicación rieles:

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

CoffeeScript tiene un comando que le permite unir múltiples coffeescripts en un solo archivo, pero sólo parece que funciona con un directorio. Por ejemplo, esto funciona bien:

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

Pero tengo que ser capaz de incluir un montón de subdirectorios algo así como este comando no trabaja:

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

¿Hay una manera de hacer esto? ¿Hay alguna forma UNIXy de pasar una lista de todos los archivos en los subdirectorios?

Estoy usando terminal en OSX.

todos ellos tienen que estar unidos en un solo archivo porque de lo contrario cada archivo por separado se compila & envuelto con esto:

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

que rompe el alcance de algunas llamadas a funciones.

Respuesta

7

Puede escribir un script de shell o una tarea de Rake para combinarlos primero y luego compilar. Algo así como:

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

a continuación, compilar output.coffee

Ajustar los caminos a sus necesidades. También asegúrese de que el archivo output.coffee no esté en la misma ruta que está buscando con find o entrará en un bucle infinito.

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

Además, puede estar interesado en estos otros puestos en Stackoverflow en relación con la búsqueda a través de los directorios:

0

Como alternativa, puede utilizar el --bare bandera, compilar a JavaScript, una d entonces quizás envuelva el JS si es necesario. Pero esto probablemente crearía problemas; por ejemplo, si tiene un archivo con el código

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

continuación, sólo hay una declaración en el var i JavaScript resultante, y i se incrementará. Pero si movió la declaración de función foo a otro archivo CoffeeScript, entonces su i viviría en el ámbito foo, y el exterior i no se vería afectado.

Así que concatenar el CoffeeScript es una solución más sabia, pero aún existe la posibilidad de confusión allí; el orden en que concatenas tu código casi con seguridad importará. Recomiendo modularizar tu código en su lugar.

28

Desde el CoffeeScript documentation:

-j, --join [ARCHIVO]: Antes de compilar, concatenar todos los scripts juntos en el orden en que fueron aprobadas, y escribirlos en el archivo especificado. Útil para la construcción de grandes proyectos.

Por lo tanto, se puede lograr su objetivo en la línea de comandos (utilizo bash) como esto:

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

donde fichero1 - archivoN son las rutas a los archivos CoffeeScript que desea compilar.

+0

Probablemente no sea el La mejor idea para usar esto, especialmente si va a usarlo en un script o algo así porque está obsoleto y se eliminará en una versión futura. – Zac

1

Use cake para compilarlos todos en uno (o más) archivos .js resultantes. Cakefile se usa como configuración que controla en qué orden se compilan tus scripts de café, algo muy útil con proyectos más grandes.

torta es muy fácil de instalar y configurar, invocando la torta de vim mientras se está editando su proyecto es entonces simplemente

:!cake build 

y se puede actualizar su navegador y ver los resultados.

Como también estoy ocupado para aprender la mejor manera de estructurar los archivos y usar coffeescript en combinación con la columna vertebral y el pastel, he creado un small project on github para mantenerlo como una referencia para mí, tal vez también te ayude pastel y algunas cosas básicas. Todos los archivos compilados están en la carpeta www para que pueda abrirlos en su navegador y todos los archivos fuente (excepto la configuración de tortas) están en la carpeta src. En este ejemplo, todos los archivos .coffee se compilan y combinan en un archivo .js de salida que luego se incluye en html.

2

La manera más fácil de usar la herramienta de línea de comando de café.

café --output --join pública --compile aplicación

aplicación es mi directorio de trabajo que sostiene varios subdirectorios y pública es donde se colocará ~ output.js archivo. Fácil de automatizar este proceso si la escritura de aplicaciones en nodejs

2

Esto me ayudó (-o directorio de salida, -j se unen para project.js, -cw de compilación y ver el directorio CoffeeScript en profundidad completa):

coffee -o web/js -j project.js -cw coffeescript 
Cuestiones relacionadas