Eu uso a tarefa md5 grunt para gerar nomes de arquivos MD5. Agora, quero renomear as fontes no arquivo HTML com o novo nome de arquivo no retorno de chamada da tarefa. Gostaria de saber qual é a maneira mais fácil de fazer isso.
javascript
node.js
replace
gruntjs
Andreas Köberle
fonte
fonte
Respostas:
Você pode usar regex simples:
Assim...
fonte
Como o replace não estava funcionando para mim, criei um simples pacote npm replace-in-file para substituir rapidamente o texto em um ou mais arquivos. É parcialmente baseado na resposta de @ asgoth.
Editar (3 de outubro de 2016) : O pacote agora oferece suporte a promessas e globs, e as instruções de uso foram atualizadas para refletir isso.
Editar (16 de março de 2018) : O pacote acumulou mais de 100 mil downloads mensais agora e foi estendido com recursos adicionais e uma ferramenta CLI.
Instalar:
Exigir módulo
Especificar opções de substituição
Substituição assíncrona com promessas:
Substituição assíncrona com retorno de chamada:
Substituição síncrona:
fonte
Talvez o módulo "replace" ( www.npmjs.org/package/replace ) também funcione para você. Não seria necessário ler e gravar o arquivo.
Adaptado da documentação:
fonte
readFile()
ewriteFile()
como a resposta aceita.Você também pode usar a função 'sed' que faz parte do ShellJS ...
Visite ShellJs.org para mais exemplos.
fonte
shx
permite executar a partir de scripts npm, o ShellJs.org recomendou. github.com/shelljs/shxVocê pode processar o arquivo enquanto está sendo lido usando fluxos. É como usar buffers, mas com uma API mais conveniente.
fonte
bufferSize
maior que a string que você está substituindo e salvando o último pedaço e concatenando com o atual, você poderá evitar esse problema.Encontrei problemas ao substituir um pequeno espaço reservado por uma grande sequência de códigos.
Eu estava fazendo:
Eu descobri que o problema eram os padrões especiais de substituição do JavaScript, descritos aqui . Como o código que eu estava usando como a string de substituição tinha algum
$
, ele estava atrapalhando a saída.Minha solução foi usar a opção de substituição de função, que NÃO faz nenhuma substituição especial:
fonte
ES2017 / 8 para Nó 7.6+ com um arquivo de gravação temporário para substituição atômica.
Note, apenas para arquivos pequenos, pois eles serão lidos na memória.
fonte
bluebird
, use nativePromise
e util.promisify .No Linux ou Mac, o keep é simples e apenas use sed com o shell. Nenhuma biblioteca externa necessária. O código a seguir funciona no Linux.
A sintaxe sed é um pouco diferente no Mac. Não posso testá-lo agora, mas acredito que você só precisa adicionar uma string vazia após o "-i":
O "g" após a final "!" faz com que sed substitua todas as instâncias em uma linha. Remova-o e somente a primeira ocorrência por linha será substituída.
fonte
Expandindo a resposta do @ Sanbor, a maneira mais eficiente de fazer isso é ler o arquivo original como um fluxo e, em seguida, também transmitir cada pedaço em um novo arquivo e, por fim, substituir o arquivo original pelo novo.
fonte
Eu usaria um fluxo duplex. como documentado aqui nodejs doc fluxos duplex
fonte
<p>Please click in the following {{link}} to verify the account</p>
com certeza você pode melhorar a função do modelo de leitura para ler como fluxo e compor os bytes por linha para torná-la mais eficiente
fonte