Ich benutze die md5-Grunzaufgabe , um MD5-Dateinamen zu generieren. Jetzt möchte ich die Quellen in der HTML-Datei mit dem neuen Dateinamen im Rückruf der Aufgabe umbenennen. Ich frage mich, was der einfachste Weg ist, dies zu tun.
javascript
node.js
replace
gruntjs
Andreas Köberle
quelle
quelle
Antworten:
Sie könnten einen einfachen regulären Ausdruck verwenden:
So...
quelle
Da das Ersetzen bei mir nicht funktioniert hat, habe ich ein einfaches npm-Paket zum Ersetzen in der Datei erstellt , um Text in einer oder mehreren Dateien schnell zu ersetzen. Es basiert teilweise auf der Antwort von @ asgoth.
Bearbeiten (3. Oktober 2016) : Das Paket unterstützt jetzt Versprechen und Globs, und die Gebrauchsanweisungen wurden aktualisiert, um dies widerzuspiegeln.
Bearbeiten (16. März 2018) : Das Paket hat jetzt über 100.000 monatliche Downloads gesammelt und wurde um zusätzliche Funktionen sowie ein CLI-Tool erweitert.
Installieren:
Modul erforderlich
Geben Sie Ersatzoptionen an
Asynchroner Ersatz durch Versprechen:
Asynchroner Ersatz durch Rückruf:
Synchroner Austausch:
quelle
Vielleicht würde das "Ersetzen" -Modul ( www.npmjs.org/package/replace ) auch für Sie funktionieren. Sie müssten die Datei nicht lesen und dann schreiben.
Aus der Dokumentation übernommen:
quelle
readFile()
undwriteFile()
akzeptieren genau die akzeptierte Antwort.Sie können auch die 'sed'-Funktion verwenden, die Teil von ShellJS ist ...
Besuchen Sie ShellJs.org für weitere Beispiele.
quelle
shx
Mit ShellJs.org können Sie npm-Skripte ausführen. github.com/shelljs/shxSie können die Datei beim Lesen mithilfe von Streams verarbeiten. Es ist wie bei der Verwendung von Puffern, jedoch mit einer bequemeren API.
quelle
bufferSize
Sie dieses Problem vermeiden könnten, indem Sie eine längere Zeichenfolge als die Zeichenfolge festlegen, die Sie ersetzen, den letzten Block speichern und mit der aktuellen verketten.Beim Ersetzen eines kleinen Platzhalters durch eine große Codefolge sind Probleme aufgetreten.
Ich habe getan:
Ich fand heraus, dass das Problem die hier beschriebenen speziellen Ersatzmuster von JavaScript waren . Da der Code, den ich als Ersetzungszeichenfolge verwendete, einige
$
enthielt, hat er die Ausgabe durcheinander gebracht.Meine Lösung bestand darin, die Option zum Ersetzen von Funktionen zu verwenden, die KEINEN speziellen Austausch durchführt:
quelle
ES2017 / 8 für Knoten 7.6+ mit einer temporären Schreibdatei für den atomaren Ersatz.
Beachten Sie, nur für kleinere Dateien, da diese in den Speicher eingelesen werden.
quelle
bluebird
, verwenden Sie nativePromise
und util.promisify .Unter Linux oder Mac ist keep einfach und verwendet sed nur mit der Shell. Keine externen Bibliotheken erforderlich. Der folgende Code funktioniert unter Linux.
Die sed-Syntax ist auf dem Mac etwas anders. Ich kann es momentan nicht testen, aber ich glaube, Sie müssen nur eine leere Zeichenfolge nach dem "-i" hinzufügen:
Das "g" nach dem Finale "!" Lässt sed alle Instanzen in einer Zeile ersetzen. Entfernen Sie es, und nur das erste Vorkommen pro Zeile wird ersetzt.
quelle
Wenn Sie die Antwort von @ Sanbor erweitern, können Sie dies am effizientesten tun, indem Sie die Originaldatei als Stream lesen und dann jeden Block in eine neue Datei streamen und zuletzt die Originaldatei durch die neue Datei ersetzen.
quelle
Ich würde stattdessen einen Duplex-Stream verwenden. wie hier dokumentiert nodejs doc Duplex-Streams
quelle
<p>Please click in the following {{link}} to verify the account</p>
Natürlich können Sie die Lesevorlagenfunktion verbessern, um sie als Stream zu lesen, und die Bytes zeilenweise zusammensetzen, um sie effizienter zu gestalten
quelle