Uso la tarea de gruñido md5 para generar nombres de archivo MD5. Ahora quiero cambiar el nombre de las fuentes en el archivo HTML con el nuevo nombre de archivo en la devolución de llamada de la tarea. Me pregunto cuál es la forma más fácil de hacer esto.
javascript
node.js
replace
gruntjs
Andreas Köberle
fuente
fuente
Respuestas:
Podrías usar expresiones regulares simples:
Entonces...
fuente
Como reemplazar no funcionaba para mí, he creado un paquete simple npm replace-in-file para reemplazar rápidamente el texto en uno o más archivos. Está parcialmente basado en la respuesta de @ asgoth.
Editar (3 de octubre de 2016) : el paquete ahora admite promesas y promesas, y las instrucciones de uso se han actualizado para reflejar esto.
Editar (16 de marzo de 2018) : el paquete ha acumulado más de 100k descargas mensuales ahora y se ha ampliado con características adicionales, así como una herramienta CLI.
Instalar en pc:
Requerir módulo
Especificar opciones de reemplazo
Reemplazo asincrónico con promesas:
Reemplazo asincrónico con devolución de llamada:
Reemplazo sincrónico:
fuente
Quizás el módulo "reemplazar" ( www.npmjs.org/package/replace ) también funcione para usted. No requeriría que leyeras y luego escribieras el archivo.
Adaptado de la documentación:
fuente
readFile()
ywriteFile()
al igual que la respuesta aceptada.También puede usar la función 'sed' que es parte de ShellJS ...
Visite ShellJs.org para más ejemplos.
fuente
shx
le permite ejecutar desde scripts npm, ShellJs.org lo recomendó. github.com/shelljs/shxPuede procesar el archivo mientras se lee utilizando secuencias. Es como usar buffers pero con una API más conveniente.
fuente
bufferSize
cadena más larga que la que está reemplazando y guardar el último fragmento y concatenar con el actual podría evitar ese problema.Me encontré con problemas al reemplazar un pequeño marcador de posición con una gran cadena de código.
Estaba haciendo:
Descubrí que el problema eran los patrones de reemplazo especiales de JavaScript, descritos aquí . Dado que el código que estaba usando como la cadena de reemplazo tenía algunos
$
, estaba estropeando la salida.Mi solución fue usar la opción de reemplazo de funciones, que NO hace ningún reemplazo especial:
fuente
ES2017 / 8 para el Nodo 7.6+ con un archivo de escritura temporal para reemplazo atómico.
Tenga en cuenta que solo para archivos pequeños, ya que se leerán en la memoria.
fuente
bluebird
, use nativePromise
y util.promisify .En Linux o Mac, keep es simple y solo usa sed con el shell. No se requieren bibliotecas externas. El siguiente código funciona en Linux.
La sintaxis de sed es un poco diferente en Mac. No puedo probarlo en este momento, pero creo que solo necesita agregar una cadena vacía después de "-i":
La "g" después de la final "!" hace que sed reemplace todas las instancias en una línea. Elimínelo y solo se reemplazará la primera aparición por línea.
fuente
Ampliando la respuesta de @ Sanbor, la forma más eficiente de hacerlo es leer el archivo original como una secuencia, y luego también transmitir cada fragmento en un nuevo archivo, y finalmente reemplazar el archivo original con el nuevo archivo.
fuente
En su lugar, usaría una transmisión dúplex. como se documenta aquí las corrientes dúplex doc de nodejs
fuente
<p>Please click in the following {{link}} to verify the account</p>
seguro que puede mejorar la función de plantilla de lectura para leer como flujo y componer los bytes por línea para que sea más eficiente
fuente