Problem :
js2coffe funktioniert nur mit Einzeldatei -Eingabe / Ausgabe-Umleitung. ein ganzes Projekt zu konvertieren und seine Verzeichnisstruktur kann ein echter Schmerz sein.
Möchten Sie ein ExpressJS Standard-Anwendungsprojekt inkl. Es ist Verzeichnisstruktur?
Sieh dir das unten stehende Skript an
UPDATE : Bitte überprüfen Sie die kurze Version dieses Skripts, wenn Sie es eilig haben.
Ein einfaches Bash-Skript erledigt den Job für dich:
%Vor% Erstelle eine Datei, zB all2coffee, lege sie in / usr / local / bin, füge ein chmod + x
im Terminal hinzu
ANFORDERUNGEN
js2coffee
global installiert, falls noch nicht installiert: npm install -g js2coffee
SCRIPT EXPLAINED
for loop:
for FILE in 'find arguments' ....
bedeutet:
find output wird FILE
string jedes mal zugewiesen, wenn find
auf eine .js Datei stolpert
finde Parameter:
-name "*.js"
schnappen Sie sich alle Dateien mit .js ending
-type f
muss vom Typ Datei sein, da wir keine .js Verzeichnisse, sondern nur die Datei
-o -path './node_modules' -prune
schließt Dateien im Verzeichnis ./node_modules
von dir aus, das -prune
ist entscheidend, andernfalls wird find in das Verzeichnis absteigen und *.js
ausgeben Dateien gefunden im Verzeichnis
blockiere:
if [ -e ${FILE} ] ; then
-e Flag prüft, ob die Zeichenfolge von FILE
eine vorhandene Datei im Dateisystem ist, andernfalls wird else
ausgeführt.
Zeichenfolgenmanipulation:
COFFEE=${FILE//.js/.coffee}
Wir geben der COFFEE
Variable einen String, den wir ersetzen
.js mit .coffee durch die Manipulation der Bash-Zeichenfolge: ${STRING//match_this/replace_with}
Konvertierung:
js2coffee "$FILE" > "$COFFEE"
füttern wir js2coffee mit FILE
und COFFEE
als Strings
EXTRA:
Sie möchten alle konvertierten .coffee-Dateien in ein neues Verzeichnis verschieben, aber behalten Sie die Struktur bei?
Verwenden Sie finden mit rsync
in Linux oder ditto
auf Os X, da cp dies nicht tut
Erstellen Sie Verzeichnisse, die von diesem Befehl benötigt werden. Hier ein kleines Skript zum Ausführen
das Hauptverzeichnis, das den Job erledigen wird
Alle .coffee-Dateien werden im Verzeichnis / coffee die Hierarchie der .js-Dateien kopieren
%Vor%Führe das aus, nachdem du deine Dateien in .coffee
konvertiert hastAKTUALISIEREN
Sie können ditto
oder rsync
mit mv
nach dem ersten Durchlauf vertauschen, um die Dateien zu verschieben, da mv
like cp
keine Unterverzeichnisse erstellt.
UPDATE 2
habe für diejenigen, die pünktlich sind, einen Liner hinzugefügt, siehe unten meine zweite Antwort!
UPDATE 3
hat eine Option hinzugefügt, um ./node_modules
Verzeichnis von der Konvertierung auszuschließen, für diejenigen, die ihre Abhängigkeiten nicht konvertieren möchten
Für diejenigen, die eine kurze Zeit haben - benutzen Sie diesen raffinierten One-Liner!
Es beginnt im aktuellen dir. / Und geht durch Unterverzeichnisse
Schleifen jede .js
Datei zu .coffee
find . -type f -name '*.js' | while read f; do echo "grinding $f to ${f/.js/.coffee} "; js2coffee "$f" > "${f/.js/.coffee}"; done
möchte das Verzeichnis ./node_modules
von der Konvertierung ausschließen? Verwenden Sie stattdessen die folgende:
find . -path ./node_modules -prune -o -type f -name '*.js' | while read f; do echo "grinding $f to ${f/.js/.coffee} "; js2coffee "$f" > "${f/.js/.coffee}"; done
kleiner Tipp:
Sie können diese Schleife auch zum Verschieben oder Kopieren von Dateien verwenden:
Ersetzen Sie den Befehl js2coffee mit allem, was Sie tun müssen.
find
output (die Liste der gefundenen Dateien) kann einfach geändert und gefiltert werden.
In bash ist die Substring-Extraktion (oder Ersetzung) einfach - wie im obigen Beispiel:
WICHTIG (lange Version) Bash-Variablen können durch Hinzufügen von $ vor dem Namen der Variablen aufgerufen werden - ABER sie sind zunächst ohne das $ , also behalte das für deine mentale Gesundheit im Hinterkopf und überprüfen Sie Ihren Code für die $ var / var = Syntax, falls Sie einige nicht-so-logische Fehler angezeigt bekommen. Ich mache diesen Fehler immer wieder, nachdem ich eine Weile nichts in Bash gemacht habe, also dachte ich, es wäre weise, diese einfache Wahrheit zu teilen (könnte auch ich sein, ein lausiger Entwickler).
WICHTIG (kurze Version) Variablendefinition: var_name=value
variable Zugriff: $var_name=value
, schlechte Idee: $var_name=value
, später Zugriff von $var_name
.
Im Beispiel wird die Variable f durch $ f aufgerufen. Mit $ {f} wird .js /.js
(/ ist ein Trennzeichen) mit .coffee - & gt; /.coffee
gefällt das: ${f/.js/.coffee}
.
Ausgänge:
green
Tags und Links javascript coffeescript