J'utilise la tâche grunt md5 pour générer des noms de fichiers MD5. Maintenant, je veux renommer les sources dans le fichier HTML avec le nouveau nom de fichier dans le rappel de la tâche. Je me demande quelle est la manière la plus simple de procéder.
javascript
node.js
replace
gruntjs
Andreas Köberle
la source
la source
Réponses:
Vous pouvez utiliser une simple regex:
Alors...
la source
Comme replace ne fonctionnait pas pour moi, j'ai créé un simple package npm replace-in-file pour remplacer rapidement le texte dans un ou plusieurs fichiers. C'est en partie basé sur la réponse de @ asgoth.
Edit (3 octobre 2016) : Le package prend désormais en charge les promesses et les globs, et les instructions d'utilisation ont été mises à jour pour refléter cela.
Edit (16 mars 2018) : Le package a accumulé plus de 100000 téléchargements mensuels maintenant et a été étendu avec des fonctionnalités supplémentaires ainsi qu'un outil CLI.
Installer:
Module requis
Spécifier les options de remplacement
Remplacement asynchrone avec promesses:
Remplacement asynchrone avec rappel:
Remplacement synchrone:
la source
Peut-être que le module «replace» ( www.npmjs.org/package/replace ) fonctionnerait également pour vous. Cela ne vous obligerait pas à lire puis à écrire le fichier.
Adapté de la documentation:
la source
readFile()
etwriteFile()
tout comme la réponse acceptée.Vous pouvez également utiliser la fonction 'sed' qui fait partie de ShellJS ...
Visitez ShellJs.org pour plus d'exemples.
la source
shx
vous permet d'exécuter à partir de scripts npm, ShellJs.org l'a recommandé. github.com/shelljs/shxVous pouvez traiter le fichier pendant sa lecture en utilisant des flux. C'est comme utiliser des tampons mais avec une API plus pratique.
la source
bufferSize
chaîne plus longue que la chaîne que vous remplacez et en sauvegardant le dernier morceau et en concaténant avec la chaîne actuelle, vous pourriez éviter ce problème.J'ai rencontré des problèmes lors du remplacement d'un petit espace réservé par une grande chaîne de code.
Je faisais:
J'ai compris que le problème était lié aux modèles de remplacement spéciaux de JavaScript, décrits ici . Puisque le code que j'utilisais comme chaîne de remplacement en contenait
$
, cela gâchait la sortie.Ma solution était d'utiliser l'option de remplacement de fonction, qui ne fait PAS de remplacement spécial:
la source
ES2017 / 8 pour Node 7.6+ avec un fichier d'écriture temporaire pour le remplacement atomique.
Remarque, uniquement pour les petits fichiers car ils seront lus en mémoire.
la source
bluebird
, utilisez nativePromise
et util.promisify .Sur Linux ou Mac, keep est simple et utilisez simplement sed avec le shell. Aucune bibliothèque externe requise. Le code suivant fonctionne sous Linux.
La syntaxe sed est un peu différente sur Mac. Je ne peux pas le tester pour le moment, mais je pense qu'il vous suffit d'ajouter une chaîne vide après le "-i":
Le "g" après la finale "!" fait que sed remplace toutes les instances sur une ligne. Supprimez-le, et seule la première occurrence par ligne sera remplacée.
la source
En développant la réponse de @ Sanbor, le moyen le plus efficace de le faire est de lire le fichier d'origine en tant que flux, puis de diffuser également chaque morceau dans un nouveau fichier, puis de remplacer enfin le fichier d'origine par le nouveau fichier.
la source
J'utiliserais plutôt un flux duplex. comme documenté ici nodejs doc duplex streams
la source
<p>Please click in the following {{link}} to verify the account</p>
à coup sûr, vous pouvez améliorer la fonction de modèle de lecture pour lire en tant que flux et composer les octets par ligne pour la rendre plus efficace
la source