Unir varios archivos en un solo archivo CoffeeScript? (subdirectorios múltiples)

StackOverflow https://stackoverflow.com/questions/4575260

  •  14-10-2019
  •  | 
  •  

Pregunta

Tengo un montón de .coffee archivos que necesito para unirse en un solo archivo.

Tengo carpetas creados como una aplicación Rails:

/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 muy 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 de trabajo:

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

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

Estoy usando terminal en OSX.

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

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

Lo que rompe el alcance de algunas llamadas a funciones.

¿Fue útil?

Solución

Se puede escribir un script de shell o un rastrillo de trabajo para combinarlos en primer lugar, a continuación, compilar. Algo así como:

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

Luego de compilación output.coffee

Ajustar los caminos a sus necesidades. También asegúrese de que el archivo output.coffee no está en el mismo camino que usted está buscando con find o se obtendrá en un bucle infinito.

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

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

Otros consejos

Desde el CoffeeScript documentación :

-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 desea compilar

.

acabo de liberar una versión alpha de CoffeeToaster, creo que puede ayudarle. http://github.com/serpentem/coffee-toaster

La forma más fácil de herramienta de línea de comandos utilización café.

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

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

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

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

torta recopilarlos todos en uno (o más) que resulta Js archivo (s). Cakefile se utiliza como configuración que controla el orden en que las secuencias de comandos de café se compilan - bastante práctico con proyectos más grandes.

La 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 el uso CoffeeScript en combinación con la columna vertebral y pastel, que han creado un pequeño proyecto en gitHub mantenerlo como una referencia para mí, tal vez le ayudará también alrededor de la torta y algunos cosas básicas. Todos los archivos compilados están en www carpeta para que pueda abrirlos en el navegador y todos los archivos de origen (excepto para la configuración de la torta) se encuentran en carpeta src. En este ejemplo, todos los archivos .coffee se compilan y se combinan en un Js archivo de salida que luego se incluye en html.

Como alternativa, se podría usar la bandera --bare, compila a JavaScript, y entonces tal vez envolver 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()

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

Así concatenando el CoffeeScript es una solución más prudente, pero todavía hay posibilidad de confusión existe; el orden en que concatena su código es casi seguro que va a importar. Recomiendo modularizar su código en su lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top