Joignez-vous à plusieurs fichiers coffeescript dans un seul fichier? (sous-répertoires multiples)
-
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.
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.