Dalam artikel sebelumnya, kami membina alat baris arahan menggunakan Deno untuk membuat permintaan kepada API pihak ketiga. Dalam artikel ini, kami akan mengabaikan operasi rangkaian sementara dan membina alat yang membolehkan anda mencari teks dalam fail dan folder dalam direktori semasa - alat seperti GREP.
NOTA: Alat yang kami bina tidak dioptimumkan dan efisien seperti grep, dan kami tidak bertujuan untuk menggantikannya! Tujuan membina alat sedemikian adalah untuk mengenali API Sistem Fail Deno.
mata utama- Sistem fail Fail Deno API membantu membuat alat baris arahan untuk mencari teks dalam fail dan direktori, sama dengan alat GREP, tetapi tidak dioptimumkan.
- Menggunakan Yargs di Deno, pemaju boleh membina antara muka pengguna untuk aplikasi baris arahan, yang membolehkan carian teks dalam direktori tertentu.
- Deno menyediakan fungsi terbina dalam seperti
- untuk penyenaraian fail dan
Deno.readDir
untuk membaca kandungan fail, dengan itu memudahkan interaksi sistem fail tanpa import tambahan.Deno.readTextFile
Anda boleh menggunakan modul laluan Deno untuk menguruskan laluan fail dengan cekap, yang termasuk fungsi seperti - untuk menyambungkan laluan fail.
path.join
skrip deno memerlukan bendera kebenaran yang jelas, seperti - atau
–allow-read
untuk melaksanakan operasi sistem fail, yang meningkatkan keselamatan dengan mengawal fungsi skrip.–allow-write
Pemaju boleh menggunakan - untuk menyusun skrip deno ke dalam executable berasingan, memudahkan pengedaran dan pelaksanaan dengan merangkumi keizinan yang diperlukan.
deno compile
Kami menganggap bahawa anda mempunyai Deno berjalan di mesin tempatan anda. Anda boleh menyemak laman web DENO atau artikel sebelumnya untuk arahan pemasangan yang lebih terperinci dan maklumat mengenai cara menambah sokongan DENO kepada editor anda.
Pada masa penulisan, versi terkini Deno adalah 1.10.2, yang merupakan versi yang saya gunakan dalam artikel ini.
untuk rujukan, anda boleh mencari kod penuh untuk artikel ini di GitHub.
Tetapkan arahan baru dengan Yargs
Seperti dalam jawatan terdahulu, kami akan menggunakan Yargs untuk membina antara muka yang boleh digunakan pengguna untuk melaksanakan alat kami. Mari buat index.ts dan isi dengan yang berikut:
import yargs from "https://deno.land/x/yargs@v17.0.1-deno/deno.ts"; interface Yargs<argvreturntype></argvreturntype> { describe: (param: string, description: string) => Yargs<argvreturntype>; </argvreturntype> demandOption: (required: string[]) => Yargs<argvreturntype>; </argvreturntype> argv: ArgvReturnType; } interface UserArguments { text: string; } const userArguments: UserArguments = (yargs(Deno.args) as unknown as Yargs<userarguments>) </userarguments> .describe("text", "the text to search for within the current directory") .demandOption(["text"]) .argv; console.log(userArguments);Terdapat banyak perkara yang boleh ditunjukkan di sini:
- Kami memasang Yargs dengan menunjuk ke laluan di repositori Deno. Saya secara eksplisit menggunakan nombor versi yang tepat untuk memastikan kami sentiasa mendapatkan versi itu supaya kami tidak menggunakan sebarang versi terkini apabila skrip sedang berjalan.
- Pada masa penulisan, Deno Typescript tidak mempunyai pengalaman yang baik dengan Yargs, jadi saya mencipta antara muka saya sendiri dan menggunakannya untuk menyediakan beberapa jenis keselamatan.
- userArguments mengandungi semua input yang akan kami minta dari pengguna. Pada masa ini, kami hanya meminta input teks, tetapi pada masa akan datang kami dapat mengembangkannya untuk menyediakan senarai fail untuk mencari, dan bukannya menganggap direktori semasa.
kita boleh menjalankannya dengan Deno Run Index.ts dan melihat output Yargs kami:
import yargs from "https://deno.land/x/yargs@v17.0.1-deno/deno.ts"; interface Yargs<argvreturntype></argvreturntype> { describe: (param: string, description: string) => Yargs<argvreturntype>; </argvreturntype> demandOption: (required: string[]) => Yargs<argvreturntype>; </argvreturntype> argv: ArgvReturnType; } interface UserArguments { text: string; } const userArguments: UserArguments = (yargs(Deno.args) as unknown as Yargs<userarguments>) </userarguments> .describe("text", "the text to search for within the current directory") .demandOption(["text"]) .argv; console.log(userArguments);
Sudah tiba masanya untuk memulakan pelaksanaannya!
Senaraikan fail
Sebelum kita mula mencari teks dalam fail yang diberikan, kita perlu menghasilkan direktori dan senarai fail untuk dicari. Deno menyediakan Deno.Readdir, yang merupakan sebahagian daripada perpustakaan "terbina dalam", yang bermaksud anda tidak perlu mengimportnya. Ia boleh didapati di ruang nama global.
Deno.Readdir tidak segerak dan mengembalikan senarai fail dan folder dalam direktori semasa. Ia mengembalikan barang -barang ini sebagai asynciterator, yang bermaksud kita perlu menggunakan untuk menunggu ... gelung untuk mendapatkan hasilnya:
$ deno run index.ts Check file:///home/jack/git/deno-file-search/index.ts Options: --help Show help [boolean] --version Show version number [boolean] --text the text to search for within the current directory [required] Missing required argument: text
Kod ini akan membaca dan merakam setiap hasil dari direktori kerja semasa (disediakan oleh deno.cwd ()). Walau bagaimanapun, jika anda cuba menjalankan skrip sekarang, anda akan menerima ralat:
for await (const fileOrFolder of Deno.readDir(Deno.cwd())) { console.log(fileOrFolder); }
ingat bahawa Deno menghendaki semua skrip secara eksplisit memperoleh keizinan untuk dibaca dari sistem fail. Dalam kes kami, bendera --allow-read
akan membolehkan kod kami dijalankan:
$ deno run index.ts --text='foo' error: Uncaught PermissionDenied: Requires read access to <cwd>, run again with the --allow-read flag </cwd>for await (const fileOrFolder of Deno.readDir(Deno.cwd())) { ^ at deno:core/core.js:86:46 at unwrapOpResult (deno:core/core.js:106:13) at Object.opSync (deno:core/core.js:120:12) at Object.cwd (deno:runtime/js/30_fs.js:57:17) at file:///home/jack/git/deno-file-search/index.ts:19:52
Dalam kes ini, saya menjalankan skrip dalam direktori alat binaan, jadi ia mendapati kod sumber TS, repositori .git, dan folder .vscode. Mari mula menulis beberapa fungsi untuk menavigasi struktur ini secara rekursif, kerana kita perlu mencari semua fail dalam direktori, bukan hanya fail peringkat atas. Di samping itu, kita boleh menambah beberapa perkara biasa. Saya tidak fikir sesiapa yang mahu skrip mencari keseluruhan folder.
Dalam kod berikut, kami membuat fungsi getFilesList, yang mengambil direktori dan mengembalikan semua fail dalam direktori itu. Sekiranya direktori ditemui, ia akan memanggil semula dirinya untuk mencari sebarang fail bersarang dan mengembalikan hasilnya:
~/$ deno run --allow-read index.ts --text='foo' { name: ".git", isFile: false, isDirectory: true, isSymlink: false } { name: ".vscode", isFile: false, isDirectory: true, isSymlink: false } { name: "index.ts", isFile: true, isDirectory: false, isSymlink: false }
maka kita boleh menggunakannya seperti ini:
const IGNORED_DIRECTORIES = new Set([".git"]); async function getFilesList( directory: string, ): Promise<string[]> { const foundFiles: string[] = []; for await (const fileOrFolder of Deno.readDir(directory)) { if (fileOrFolder.isDirectory) { if (IGNORED_DIRECTORIES.has(fileOrFolder.name)) { // Skip this folder, it's in the ignore list. continue; } // If it's not ignored, recurse and search this folder for files. const nestedFiles = await getFilesList( path.join(directory, fileOrFolder.name), ); foundFiles.push(...nestedFiles); } else { // We found a file, so store it. foundFiles.push(path.join(directory, fileOrFolder.name)); } } return foundFiles; }
kami juga mendapat beberapa output yang kelihatan baik:
const files = await getFilesList(Deno.cwd()); console.log(files);
menggunakan modul jalan
kita kini boleh menggabungkan laluan fail menggunakan rentetan templat seperti berikut:
$ deno run --allow-read index.ts --text='foo' [ "/home/jack/git/deno-file-search/.vscode/settings.json", "/home/jack/git/deno-file-search/index.ts" ]
tetapi ini lebih baik dengan modul jalan Deno. Modul ini adalah salah satu modul Deno yang ditawarkan sebagai sebahagian daripada perpustakaan standardnya (sangat serupa dengan nod menggunakan modul Path), dan jika anda telah menggunakan modul laluan Node, kod itu kelihatan sangat serupa. Pada masa penulisan, versi perpustakaan standard terkini yang disediakan oleh Deno ialah 0.97.0, kami mengimport modul laluan dari fail mod.ts:
import yargs from "https://deno.land/x/yargs@v17.0.1-deno/deno.ts"; interface Yargs<argvreturntype></argvreturntype> { describe: (param: string, description: string) => Yargs<argvreturntype>; </argvreturntype> demandOption: (required: string[]) => Yargs<argvreturntype>; </argvreturntype> argv: ArgvReturnType; } interface UserArguments { text: string; } const userArguments: UserArguments = (yargs(Deno.args) as unknown as Yargs<userarguments>) </userarguments> .describe("text", "the text to search for within the current directory") .demandOption(["text"]) .argv; console.log(userArguments);
mod.ts sentiasa menjadi titik masuk apabila mengimport modul standard Deno. Dokumentasi untuk modul ini terletak di laman web Deno dan menyenaraikan Path.join, yang akan mengambil pelbagai laluan dan menyertai mereka ke dalam satu jalan. Mari kita import dan gunakan fungsi dan bukannya menggabungkannya secara manual:
... (selebihnya kod ditinggalkan di sini kerana ia diulang dengan teks asal dan telah diubahsuai dan dioptimumkan dalam output sebelumnya.)
... (selebihnya kod ditinggalkan kerana ia berulang dari asal dan telah diubahsuai dan dioptimumkan dalam output sebelumnya.)
::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::Atas ialah kandungan terperinci Bekerja dengan sistem fail di Deno. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Terdapat tiga cara biasa untuk memulakan permintaan HTTP dalam node.js: Gunakan modul terbina dalam, axios, dan nod-fetch. 1. Gunakan modul HTTP/HTTPS terbina dalam tanpa kebergantungan, yang sesuai untuk senario asas, tetapi memerlukan pemprosesan manual jahitan data dan pemantauan ralat, seperti menggunakan https.get () untuk mendapatkan data atau menghantar permintaan pos melalui .write (); 2.AXIOS adalah perpustakaan pihak ketiga berdasarkan janji. Ia mempunyai sintaks ringkas dan fungsi yang kuat, menyokong async/menunggu, penukaran JSON automatik, pemintas, dan lain -lain. Adalah disyorkan untuk memudahkan operasi permintaan tak segerak; 3.Node-Fetch menyediakan gaya yang serupa dengan pengambilan penyemak imbas, berdasarkan janji dan sintaks mudah

Jenis data JavaScript dibahagikan kepada jenis primitif dan jenis rujukan. Jenis primitif termasuk rentetan, nombor, boolean, null, undefined, dan simbol. Nilai -nilai tidak berubah dan salinan disalin apabila memberikan nilai, jadi mereka tidak mempengaruhi satu sama lain; Jenis rujukan seperti objek, tatasusunan dan fungsi menyimpan alamat memori, dan pembolehubah menunjuk objek yang sama akan mempengaruhi satu sama lain. Typeof dan Instanceof boleh digunakan untuk menentukan jenis, tetapi memberi perhatian kepada isu -isu sejarah TypeOfNull. Memahami kedua -dua jenis perbezaan ini dapat membantu menulis kod yang lebih stabil dan boleh dipercayai.

Helo, pemaju JavaScript! Selamat datang ke berita JavaScript minggu ini! Minggu ini kami akan memberi tumpuan kepada: Pertikaian tanda dagangan Oracle dengan Deno, objek masa JavaScript baru disokong oleh pelayar, kemas kini Google Chrome, dan beberapa alat pemaju yang kuat. Mari mulakan! Pertikaian tanda dagangan Oracle dengan percubaan Deno Oracle untuk mendaftarkan tanda dagangan "JavaScript" telah menyebabkan kontroversi. Ryan Dahl, pencipta Node.js dan Deno, telah memfailkan petisyen untuk membatalkan tanda dagangan, dan dia percaya bahawa JavaScript adalah standard terbuka dan tidak boleh digunakan oleh Oracle

CACHEAPI adalah alat yang disediakan oleh penyemak imbas kepada permintaan rangkaian cache, yang sering digunakan bersempena dengan ServiceWorker untuk meningkatkan prestasi laman web dan pengalaman luar talian. 1. Ia membolehkan pemaju menyimpan sumber secara manual seperti skrip, helaian gaya, gambar, dan lain -lain; 2. Ia boleh memadankan tindak balas cache mengikut permintaan; 3. Ia menyokong memotong cache tertentu atau membersihkan seluruh cache; 4. Ia boleh melaksanakan keutamaan cache atau strategi keutamaan rangkaian melalui perkhidmatan pekerja yang mendengar acara mengambil; 5. Ia sering digunakan untuk sokongan luar talian, mempercepat kelajuan akses berulang, sumber utama dan kandungan kemas kini latar belakang; 6. Apabila menggunakannya, anda perlu memberi perhatian kepada kawalan versi cache, sekatan penyimpanan dan perbezaan dari mekanisme caching HTTP.

Janji adalah mekanisme teras untuk mengendalikan operasi tak segerak dalam JavaScript. Memahami panggilan rantaian, pengendalian ralat dan gabungan adalah kunci untuk menguasai aplikasi mereka. 1. Panggilan rantai mengembalikan janji baru melalui .then () untuk merealisasikan persamaan proses tak segerak. Setiap .then () menerima hasil sebelumnya dan boleh mengembalikan nilai atau janji; 2. Pengendalian ralat harus menggunakan .catch () untuk menangkap pengecualian untuk mengelakkan kegagalan senyap, dan boleh mengembalikan nilai lalai dalam tangkapan untuk meneruskan proses; 3. Gabungan seperti janji.all () (berjaya hanya berjaya selepas semua kejayaan), janji.race () (penyempurnaan pertama dikembalikan) dan janji.allsettled () (menunggu semua penyelesaian)

Kaedah terbina dalam JavaScript seperti .map (), .filter () dan .reduce () dapat memudahkan pemprosesan data; 1) .map () digunakan untuk menukar elemen satu hingga satu untuk menghasilkan tatasusunan baru; 2) .filter () digunakan untuk menapis elemen mengikut keadaan; 3) .reduce () digunakan untuk mengagregatkan data sebagai nilai tunggal; Penyalahgunaan harus dielakkan apabila digunakan, mengakibatkan kesan sampingan atau masalah prestasi.

Gelung acara JavaScript menguruskan operasi tak segerak dengan menyelaraskan susunan panggilan, webapis, dan barisan tugas. 1. Stack panggilan melaksanakan kod segerak, dan ketika menghadapi tugas -tugas yang tidak segerak, ia diserahkan kepada Webapi untuk diproses; 2. Selepas Webapi melengkapkan tugas di latar belakang, ia meletakkan panggil balik ke dalam barisan yang sama (tugas makro atau tugas mikro); 3. Loop acara memeriksa sama ada timbunan panggilan kosong. Jika ia kosong, panggilan balik diambil dari barisan dan ditolak ke dalam tumpukan panggilan untuk pelaksanaan; 4. Tugas -tugas mikro (seperti janji. 5. Memahami gelung acara membantu mengelakkan menyekat benang utama dan mengoptimumkan pesanan pelaksanaan kod.

Gelembung peristiwa menyebarkan dari elemen sasaran ke luar ke nod nenek moyang, sementara penangkapan peristiwa menyebarkan dari lapisan luar ke dalam ke elemen sasaran. 1. Bubbles Acara: Selepas mengklik elemen kanak -kanak, acara itu mencetuskan pendengar elemen induk ke atas. Sebagai contoh, selepas mengklik butang, ia mengeluarkan anak -anak terlebih dahulu, dan kemudian ParentClicked. 2. Tangkap Acara: Tetapkan parameter ketiga menjadi benar, supaya pendengar dilaksanakan di peringkat penangkapan, seperti mencetuskan pendengar penangkapan elemen induk sebelum mengklik butang. 3. Penggunaan praktikal termasuk pengurusan bersatu peristiwa elemen kanak -kanak, pemprosesan pemintasan dan pengoptimuman prestasi. 4. Aliran acara DOM dibahagikan kepada tiga peringkat: menangkap, sasaran dan gelembung, dan pendengar lalai dilaksanakan di peringkat gelembung.
