Saya menggunakan tugas kasar MD5 untuk menghasilkan nama file MD5. Sekarang saya ingin mengganti nama sumber dalam file HTML dengan nama file baru dalam panggilan balik tugas. Saya bertanya-tanya apa cara termudah untuk melakukan ini.
javascript
node.js
replace
gruntjs
Andreas Köberle
sumber
sumber
Jawaban:
Anda bisa menggunakan regex sederhana:
Begitu...
sumber
Karena ganti tidak berfungsi untuk saya, saya telah membuat paket pengganti npm file sederhana untuk mengganti teks dengan cepat dalam satu atau beberapa file. Sebagian didasarkan pada jawaban @ asgoth.
Sunting (3 Oktober 2016) : Paket sekarang mendukung janji dan gumpalan, dan instruksi penggunaan telah diperbarui untuk mencerminkan ini.
Edit (16 Maret 2018) : Paket ini telah mengumpulkan lebih dari 100 ribu unduhan bulanan sekarang dan telah diperpanjang dengan fitur-fitur tambahan serta alat CLI.
Install:
Membutuhkan modul
Tentukan opsi penggantian
Penggantian asinkron dengan janji:
Penggantian asinkron dengan panggilan balik:
Penggantian sinkron:
sumber
Mungkin modul "ganti" ( www.npmjs.org/package/replace ) juga akan bekerja untuk Anda. Anda tidak perlu membaca dan menulis file.
Diadaptasi dari dokumentasi:
sumber
readFile()
danwriteFile()
seperti jawaban yang diterima.Anda juga dapat menggunakan fungsi 'sed' yang merupakan bagian dari ShellJS ...
Kunjungi ShellJs.org untuk lebih banyak contoh.
sumber
shx
memungkinkan Anda menjalankan dari skrip npm, ShellJs.org merekomendasikannya. github.com/shelljs/shxAnda dapat memproses file saat sedang dibaca dengan menggunakan stream. Ini seperti menggunakan buffer tetapi dengan API yang lebih nyaman.
sumber
bufferSize
lebih lama dari string yang Anda ganti dan menyimpan potongan terakhir dan menyatukan dengan yang sekarang Anda dapat menghindari masalah itu.Saya mengalami masalah ketika mengganti placeholder kecil dengan serangkaian kode besar.
Saya sedang melakukan:
Saya menemukan masalahnya adalah pola penggantian khusus JavaScript, dijelaskan di sini . Karena kode yang saya gunakan sebagai string pengganti punya beberapa
$
di dalamnya, itu mengacaukan output.Solusi saya adalah menggunakan opsi penggantian fungsi, yang TIDAK melakukan penggantian khusus:
sumber
ES2017 / 8 untuk Node 7.6+ dengan file tulis sementara untuk penggantian atom.
Catatan, hanya untuk file bertubuh kecil karena akan dibaca ke dalam memori.
sumber
bluebird
, gunakan asliPromise
dan util.promisify .Di Linux atau Mac, tetap sederhana dan gunakan saja dengan shell. Tidak diperlukan perpustakaan eksternal. Kode berikut berfungsi di Linux.
Sintaks sednya sedikit berbeda pada Mac. Saya tidak dapat mengujinya sekarang, tetapi saya yakin Anda hanya perlu menambahkan string kosong setelah "-i":
"G" setelah final "!" membuat sed mengganti semua instance pada satu baris. Hapus itu, dan hanya kemunculan pertama per baris yang akan diganti.
sumber
Memperluas jawaban @ Sanbor, cara paling efisien untuk melakukan ini adalah dengan membaca file asli sebagai aliran, dan kemudian juga mengalirkan setiap potongan ke file baru, dan kemudian terakhir mengganti file asli dengan file baru.
sumber
Saya akan menggunakan aliran duplex sebagai gantinya. seperti yang didokumentasikan di sini nodejs doc duplex stream
sumber
<p>Please click in the following {{link}} to verify the account</p>
pasti Anda dapat meningkatkan fungsi membaca template untuk dibaca sebagai aliran dan menyusun byte demi baris agar lebih efisien
sumber