Joignez-vous à plusieurs fichiers coffeescript dans un seul fichier? (sous-répertoires multiples)

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

  •  14-10-2019
  •  | 
  •  

Question

J'ai un tas de fichiers .coffee que je dois joindre en un seul fichier.

Je possède des dossiers mis en place comme un des rails app:

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

coffeescript a une commande qui vous permet de joindre plusieurs coffeescripts en un seul fichier, mais il semble que de travailler avec un répertoire. Par exemple, cela fonctionne très bien:

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

Mais je dois être en mesure d'inclure un groupe de sous-répertoires peu comme cette commande non-travail:

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

Est-il possible de le faire? Est-il possible de passer unixy dans une liste de tous les fichiers dans les sous-répertoires?

J'utilise terminal dans OSX.

Ils doivent tous être joints dans un seul fichier, car sinon chaque fichier séparé sera compilé et enveloppé avec ceci:

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

Ce qui brise la portée de certains appels de fonction.

Était-ce utile?

La solution

Vous pourriez écrire une tâche de script shell ou d'un râteau pour les combiner ensemble, puis compiler. Quelque chose comme:

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

compilez output.coffee

Régler les chemins à vos besoins. Assurez-vous également que le fichier output.coffee n'est pas dans le même chemin que vous êtes à la recherche avec find ou vous entrerez dans une boucle infinie.

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

En outre, vous pouvez être intéressé par ces autres postes sur Stackoverflow concernant la recherche dans les répertoires:

Autres conseils

De la documentation CoffeeScript :

  

-j, --join [DOSSIER]: Avant de compiler, concaténer tous les scripts ensemble dans l'ordre où ils ont été passés, et les écrire dans le fichier spécifié. Utile pour la construction de grands projets.

Alors, vous pouvez atteindre votre objectif à la ligne de commande (j'utilise bash) comme ceci:

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

où fichier1 - fileN sont les chemins d'accès aux fichiers CoffeeScript que vous souhaitez compiler

.

J'ai juste une libération version alpha de CoffeeToaster, je pense qu'il peut vous aider. http://github.com/serpentem/coffee-toaster

La façon la plus facile à utiliser l'outil de ligne de commande du café.

café --output publique --join --compile app

app est mon répertoire de travail multiples sous-répertoires et la tenue publique est où le dossier ~ sera placé. Facile à automatiser ce processus si l'application écrit dans nodejs

Cela m'a aidé (-o répertoire de sortie, -j joindre à project.js, compiler -cw et regarder répertoire coffeescript en profondeur):

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

Utilisez gâteau de les compiler en un seul (ou plus) résultant dossier (s). Cakefile est utilisé comme configuration qui contrôle l'ordre dans lequel vos scripts de café sont compilés - très pratique avec de plus grands projets.

gâteau est assez facile à installer et à configurer, invoquant le gâteau de vim pendant que vous éditez votre projet est alors simplement

:!cake build

et vous pouvez actualiser votre navigateur et voir les résultats.

Comme je suis aussi occupé d'apprendre la meilleure façon de structurer les fichiers et l'utilisation coffeescript en combinaison avec la colonne vertébrale et le gâteau, j'ai créé un petit projet sur github pour le garder comme référence pour moi-même, peut-être vous aider aussi autour du gâteau et quelques-uns choses de base. Tous les fichiers compilés sont www dossier afin que vous puissiez les ouvrir dans votre navigateur et tous les fichiers source (sauf pour la configuration du gâteau) sont src dossier . Dans cet exemple, tous les fichiers sont compilés et .coffee combinés un fichier .js sortie qui est alors inclus dans html.

Sinon, vous pouvez utiliser le drapeau --bare, compiler JavaScript, et peut-être envelopper la JS si nécessaire. Mais cela risque de créer des problèmes; par exemple, si vous avez un fichier avec le code

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

alors il n'y a qu'une seule déclaration de var i dans le JavaScript résultant et i sera incrémenté. Mais si vous déplaciez la déclaration de fonction foo à un autre fichier CoffeeScript, sa i vivrais dans le cadre de foo et la i extérieure ne serait pas affectée.

concaténer Ainsi, le CoffeeScript est une solution plus sage, mais il y a encore un potentiel de confusion là-bas; l'ordre dans lequel vous concaténer votre code va presque certainement à la matière. Je recommande fortement modularisation votre code à la place.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top