Apakah ada cara yang lebih mudah untuk menyalin folder dan seluruh isinya tanpa manual melakukan urutan fs.readir
, fs.readfile
, fs.writefile
rekursif?
Hanya ingin tahu apakah saya kehilangan fungsi yang idealnya bekerja seperti ini
fs.copy("/path/to/source/folder","/path/to/destination/folder");
javascript
node.js
sumber hilang
sumber
sumber
Jawaban:
Anda dapat menggunakan modul ncp . Saya pikir inilah yang Anda butuhkan
sumber
npm install ncp
dan bekerja di kurang dari 30-an. Terima kasih.Ini adalah pendekatan saya untuk menyelesaikan masalah ini tanpa modul tambahan. Hanya menggunakan modul
fs
dan built-inpath
.Catatan: Ini tidak menggunakan fungsi baca / tulis dari fs sehingga tidak menyalin data meta (waktu pembuatan dll.). Pada node 8.5 ada
copyFileSync
fungsi yang tersedia yang memanggil fungsi copy OS dan karena itu juga menyalin meta data. Saya belum mengujinya, tetapi seharusnya hanya menggantikan mereka. (Lihat https://nodejs.org/api/fs.html#fs_fs_copyfilesync_src_dest_flags )sumber
javascript var fs = require('fs'); var path = require('path');
fs.copy
atau memanggilfs.copySync
mereka fungsi copy level OS di MacOS dan Windows dan karenanya benar-benar menyalin file.fs.copyFile
dan jika penggalian Anda melalui sumber simpul Anda akan melihat di Mac dan Windows mereka memanggil fungsi spesifik OS untuk menyalin fileAda beberapa modul yang mendukung penyalinan folder dengan kontennya. Yang paling populer adalah kunci pas
Alternatifnya adalah node-fs-extra
sumber
wrench
telah usang dan harus diganti olehnode-fs-extra
( github.com/jprichardson/node-fs-extra )Berikut adalah fungsi yang secara rekursif menyalin direktori dan isinya ke direktori lain:
sumber
fs.lstatSync
sebagai gantifs.statSync
)linking
tidak menyalin .. Masalahnya adalah ketika Anda mengubah konten file tertaut, file asli juga akan berubah.fs-extra
bekerja untuk saya kapanncp
danwrench
gagal:https://www.npmjs.com/package/fs-extra
sumber
wrench
mengarahkan pengguna untuk menggunakanfs-extra
karena ia telah meninggalkan perpustakaannya.Untuk linux / unix OS, Anda dapat menggunakan sintaks shell
Itu dia!
sumber
Modul fs-extra bekerja seperti pesona.
Instal fs-extra
Berikut ini adalah program untuk menyalin direktori sumber ke direktori tujuan.
Referensi
fs-extra: https://www.npmjs.com/package/fs-extra
Contoh: Tutorial NodeJS - Node.js Menyalin Folder
sumber
Inilah yang akan saya lakukan secara pribadi:
berfungsi untuk folder dan file
sumber
Saya membuat contoh kecil yang berfungsi menyalin folder sumber ke folder tujuan lain hanya dalam beberapa langkah (berdasarkan jawaban @ shift66 menggunakan ncp):
langkah 1 - Instal modul ncp:
langkah 2 - buat copy.js (modifikasi srcPath dan destPath vars untuk apa pun yang Anda butuhkan):
langkah 3 - jalankan
sumber
Ini cukup mudah dengan simpul 10.
Ini mengasumsikan
dest
tidak ada.sumber
require('util').promisify
denganfs.mkdir
danfs.copyFile
bukannyarequire('fs').promises
, yang masih eksperimental di v11.1.withFileTypes
opsi? Karena itu menghematstat
panggilan AndawithFileTypes
opsi.Saya tahu begitu banyak jawaban di sini tetapi tidak ada yang menjawabnya dengan cara sederhana. Mengenai dokumentasi resmi fs-exra , Anda dapat melakukannya dengan sangat mudah
sumber
{ recursive: true }
dari github doc yang Anda sebutkan, Tidak tahu apakah ini berfungsi.Karena saya hanya membuat skrip simpul sederhana, saya tidak ingin para pengguna skrip perlu mengimpor banyak modul eksternal dan dependensi, jadi saya memakai topi berpikir saya dan melakukan pencarian untuk menjalankan perintah dari bash kulit.
Cuplikan kode node.js ini secara rekursif menyalin folder bernama node-webkit.app ke folder bernama build:
Terima kasih kepada Lance Pollard di dzone untuk memulai saya.
Cuplikan di atas terbatas pada platform berbasis Unix seperti Mac OS dan Linux, tetapi teknik yang sama dapat bekerja untuk Windows.
sumber
@ mallikarjun-m terima kasih!
fs-extra melakukan hal itu dan bahkan dapat mengembalikan Janji jika Anda tidak memberikan panggilan balik! :)
sumber
Yang dengan dukungan tautan simbolis + tidak melempar jika direktori ada.
sumber
Kode ini akan berfungsi dengan baik, menyalin folder apa pun secara rekursif ke lokasi mana pun. Hanya untuk Windows.
Berfungsi sempurna untuk game Berbasis Teks saya untuk membuat pemain baru.
sumber
Saya mencoba fs-extra dan menyalin-dir untuk menyalin-folder-secara rekursif. tapi aku menginginkannya
Jadi saya menulis sendiri:
dan fungsi serupa mkdirs, yang merupakan alternatif untuk mkdirp
sumber
Saya menulis fungsi ini untuk menyalin file (copyFileSync) atau memindahkan (renameSync) file secara rekursif antara direktori:
sumber
Jika Anda berada di Linux, dan kinerja tidak menjadi masalah, Anda dapat menggunakan
exec
fungsi darichild_process
modul, untuk menjalankan perintah bash:Dalam beberapa kasus, saya menemukan solusi ini lebih bersih daripada mengunduh seluruh modul atau bahkan menggunakan
fs
modul.sumber
ncp mengunci deskriptor file dan mengaktifkan panggilan balik saat belum dibuka. Saya merekomendasikan untuk menggunakan modul salin rekursif sebagai gantinya. Ini mendukung acara dan Anda dapat yakin pada akhir salinan.
sumber
Hati-hati saat memilih paket Anda. Beberapa paket seperti copy-dir tidak mendukung copy file berukuran besar lebih dari 0x1fffffe8 karakter. Ini akan menimbulkan beberapa kesalahan seperti:
Saya pernah mengalami hal seperti ini di salah satu proyek saya. Pada akhirnya, saya harus mengubah paket yang saya gunakan dan menyesuaikan banyak kode. Saya akan mengatakan bahwa ini bukan pengalaman yang sangat menyenangkan.
Jika beberapa sumber dan beberapa tujuan salinan diinginkan, Anda dapat menggunakan lebih baik menyalin dan menulis sesuatu seperti ini:
atau bahkan :
sumber
Ya,
ncp
apakahcool
...Anda mungkin ingin / harus menjanjikan fungsinya untuk membuatnya
super cool
. Karena Anda melakukannya, tambahkan ketools
file untuk menggunakannya kembali.Di bawah ini adalah versi yang berfungsi
Async
dan sedang digunakanPromises
.index.js
tools.js
sumber
Pendekatan termudah untuk masalah ini adalah hanya menggunakan modul 'fs' dan 'Path' dan beberapa logika .....
Semua file dalam folder root salin dengan Nama Baru jika Anda Hanya ingin mengatur nomor versi yaitu ....................... "var v = 'Direktori Anda Nama'"
dalam awalan nama File V konten ditambahkan dengan Nama file.
sumber
Inilah yang saya lakukan:
kemudian:
Kemudian panggil metode:
sumber