Umwandlung des gesamten Projekts in CoffeeScript mit js2coffee

7

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

    
Inoperable 30.12.2012, 15:10
quelle

2 Antworten

23

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

wollen

-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 hast

AKTUALISIEREN

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

    
Inoperable 30.12.2012, 15:10
quelle
9

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 - & gt; /.js (/ ist ein Trennzeichen) mit .coffee - & gt; /.coffee gefällt das: ${f/.js/.coffee} .

%Vor%

Ausgänge:

green

    
Inoperable 30.01.2014 23:31
quelle

Tags und Links