Organisasi kod projek: Polyrepo lwn. Monorepo
Terdapat dua cara utama untuk mengatur kod projek:
- Polyrepo: Sebarkan kod projek dalam repositori yang berbeza. Ini adalah amalan standard semasa. Pelbagai pasukan mempunyai gudang mereka sendiri, membina produk dan saluran paip, dan mempunyai autonomi.
- Monorepo: Memusatkan semua kod projek dalam satu repositori. Projek dibahagikan kepada aplikasi dan pakej untuk memudahkan penggunaan semula kod dan berkongsi fungsi standard, yang membantu menyatukan versi pakej pihak ketiga, membina kod sumber secara rekursif untuk kebergantungan dan menggunakan alatan yang sama untuk saluran paip CI/CD.
Monorepo digunakan oleh banyak syarikat teknologi besar, seperti Yandex. Monorepo membantu berkongsi idea dan amalan terbaik di kalangan pasukan dan unit perniagaan. Untuk mendapatkan maklumat lanjut tentang Monorepo dan alatan berkaitan, sila lawati https://www.php.cn/link/b01ccf4f29b57b0b1bdb9407050db28d. Artikel ini akan memberi tumpuan kepada penyelesaian mudah untuk membina Monorepo menggunakan PNPM.
PNPM menggunakan ruang kerja untuk menyepadukan berbilang projek dalam satu repositori.
Persediaan persekitaran
Pertama, buat folder kosong sebagai projek Monorepo baharu. Mulakan PNPM di gudang:
pnpm init
Kemudian, cipta fail pnpm-workspace.yaml
yang menerangkan folder pakej:
// pnpm-workspace.yaml packages: - 'packages/**' - 'apps/**'Folder
/packages
menyimpan pustaka kongsi dan folder /apps
menyimpan aplikasi (contohnya, aplikasi mudah alih React Native kendiri dan aplikasi web yang menggunakan komponen atau perpustakaan sambungan yang sama untuk berkomunikasi dengan pelayan API).
Artikel ini akan menggunakan robot penerbitan Telegram sebagai contoh Kod sumbernya terletak di GitHub: https://www.php.cn/link/8164ca2fe04767628ac1c6813e8a0867. Muat turun dan ekstrak ke folder /apps/publish-bot
, kemudian jalankan arahan pemasangan:
pnpm install
Buat Telegram Toolkit
Buat folder bernama /packages
dalam folder telegram-utils
dan mulakan PNPM dan TypeScript:
pnpm init && pnpm add -D typescript && pnpm tsc --init
Pakej ini akan menyediakan fungsi untuk menggabungkan teks dan kapsyen daripada semua mesej (teks, video dan foto). Pakej Telegraf perlu dipasang:
pnpm add telegraf
Semua kod sumber hendaklah terletak dalam direktori /src
. Untuk memudahkan pengelompokan berfungsi, adalah disyorkan untuk mencipta folder yang berbeza. Fungsi menggabungkan teks terletak dalam folder /texts
, kodnya adalah seperti berikut:
// packages/telegram-utils/src/texts/combineTexts.ts import { Message } from 'telegraf/types'; import { FmtString, join } from 'telegraf/format'; type GroupedMessages = { photos: Array<Message.PhotoMessage>; videos: Array<Message.VideoMessage>; text: Array<Message.TextMessage>; }; export const combineTexts = ({ photos, videos, text }: GroupedMessages) => { const photoTexts = photos .map(photo => photo.caption ? new FmtString(photo.caption, photo.caption_entities) : undefined) .filter((t): t is Required<FmtString> => t !== undefined); const videoTexts = videos .map(video => video.caption ? new FmtString(video.caption, video.caption_entities) : undefined) .filter((t): t is Required<FmtString> => t !== undefined); const allTexts = []; if (text.length) allTexts.push(join(text.map(t => new FmtString(t.text, t.entities))), '\n'); if (photoTexts.length) allTexts.push(join(photoTexts, '\n')); if (videoTexts.length) allTexts.push(join(videoTexts, '\n')); return join(allTexts, '\n'); };
Perihalan kod:
- Fungsi ini memasukkan mesej yang dikumpulkan mengikut jenis: foto, video atau teks
- Mesej media hendaklah ditukar kepada rentetan FMT yang mengandungi tajuk dan entiti tajuk. Untuk penapisan seterusnya,
undefined
hendaklah dikembalikan - Sambungkan tatasusunan teks langkah demi langkah, akhirnya menggabungkan semua teks menjadi satu mesej besar.
Buat fail indeks untuk folder /texts
:
pnpm init
Gunakan medan package.json
dalam fail exports
untuk menyediakan eksport fungsi pakej:
// pnpm-workspace.yaml packages: - 'packages/**' - 'apps/**'
Untuk mengenal pasti pakej Monorepo dalam aplikasi anda, tambahkan awalan @monorepo
pada semua pakej. Namakan semula pakej package.json
dalam fail telegram-utils
:
pnpm install
Tambah skrip binaan:
pnpm init && pnpm add -D typescript && pnpm tsc --init
Fail package.json
lengkap:
pnpm add telegraf
Konfigurasikan pengkompil TypeScript: dayakan kompilasi tambahan untuk menjimatkan masa binaan dan proses hanya bahagian yang diubah; dayakan kompilasi kompaun untuk menggunakan rujukan projek. Tentukan folder /src
sebagai rootDir
dan outDir
pakej sebagai /dist
. Dikemas kini tsconfig.json
:
// packages/telegram-utils/src/texts/combineTexts.ts import { Message } from 'telegraf/types'; import { FmtString, join } from 'telegraf/format'; type GroupedMessages = { photos: Array<Message.PhotoMessage>; videos: Array<Message.VideoMessage>; text: Array<Message.TextMessage>; }; export const combineTexts = ({ photos, videos, text }: GroupedMessages) => { const photoTexts = photos .map(photo => photo.caption ? new FmtString(photo.caption, photo.caption_entities) : undefined) .filter((t): t is Required<FmtString> => t !== undefined); const videoTexts = videos .map(video => video.caption ? new FmtString(video.caption, video.caption_entities) : undefined) .filter((t): t is Required<FmtString> => t !== undefined); const allTexts = []; if (text.length) allTexts.push(join(text.map(t => new FmtString(t.text, t.entities))), '\n'); if (photoTexts.length) allTexts.push(join(photoTexts, '\n')); if (videoTexts.length) allTexts.push(join(videoTexts, '\n')); return join(allTexts, '\n'); };
Integrasi
Kembali ke /apps/publish-bot
dan tambah pakej @monorepo/telegram-utils
pada kebergantungan. Ambil perhatian bahawa anda tidak perlu menentukan versi pakej, gunakan workspace:*
untuk menunjukkan:
// packages/telegram-utils/src/texts/index.ts export * from './combineTexts';
Pasang kebergantungan:
// packages/telegram-utils/package.json "exports": { "./texts": { "import": "./src/texts/index.ts", "require": "./dist/texts/index.js" } }
Kemas kini perintah preview
untuk menerbitkan bot:
// packages/telegram-utils/package.json "name": "@monorepo/telegram-utils"
Kemas kini/apps/publish-bot/tsconfig.json
:
// packages/telegram-utils/package.json "scripts": { "build": "tsc -p tsconfig.json" }
Sebelum membina kod aplikasi, anda perlu membina semua kebergantungan:
// packages/telegram-utils/package.json { "name": "@monorepo/telegram-utils", "version": "1.0.0", "main": "index.js", "scripts": { "build": "tsc -p tsconfig.json" }, "keywords": [], "license": "ISC", "exports": { "./texts": { "import": "./src/texts/index.ts", "require": "./dist/texts/index.js" } }, "devDependencies": { "typescript": "^5.7.3" }, "dependencies": { "telegraf": "^4.16.3" } }
Ringkasan
Bot keluaran kini menggunakan perpustakaan/pakej kongsi dalaman dan terletak di Monorepo. Ini memungkinkan untuk membina ciri baharu dan menggunakan semula kod dengan cepat merentas berbilang aplikasi.
Imej melalui Gabriel Heinzer di Unsplash
Atas ialah kandungan terperinci Bina dan jalankan projek anda di Monorepo dengan PNPM. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

JavaScript adalah di tengah -tengah laman web moden kerana ia meningkatkan interaktiviti dan dinamik laman web. 1) Ia membolehkan untuk menukar kandungan tanpa menyegarkan halaman, 2) memanipulasi laman web melalui Domapi, 3) menyokong kesan interaktif kompleks seperti animasi dan drag-and-drop, 4) mengoptimumkan prestasi dan amalan terbaik untuk meningkatkan pengalaman pengguna.

C dan JavaScript mencapai interoperabilitas melalui webassembly. 1) Kod C disusun ke dalam modul WebAssembly dan diperkenalkan ke dalam persekitaran JavaScript untuk meningkatkan kuasa pengkomputeran. 2) Dalam pembangunan permainan, C mengendalikan enjin fizik dan rendering grafik, dan JavaScript bertanggungjawab untuk logik permainan dan antara muka pengguna.

JavaScript digunakan secara meluas di laman web, aplikasi mudah alih, aplikasi desktop dan pengaturcaraan sisi pelayan. 1) Dalam pembangunan laman web, JavaScript mengendalikan DOM bersama -sama dengan HTML dan CSS untuk mencapai kesan dinamik dan menyokong rangka kerja seperti JQuery dan React. 2) Melalui reaktnatif dan ionik, JavaScript digunakan untuk membangunkan aplikasi mudah alih rentas platform. 3) Rangka kerja elektron membolehkan JavaScript membina aplikasi desktop. 4) Node.js membolehkan JavaScript berjalan di sisi pelayan dan menyokong permintaan serentak yang tinggi.

Python lebih sesuai untuk sains data dan automasi, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python berfungsi dengan baik dalam sains data dan pembelajaran mesin, menggunakan perpustakaan seperti numpy dan panda untuk pemprosesan data dan pemodelan. 2. Python adalah ringkas dan cekap dalam automasi dan skrip. 3. JavaScript sangat diperlukan dalam pembangunan front-end dan digunakan untuk membina laman web dinamik dan aplikasi satu halaman. 4. JavaScript memainkan peranan dalam pembangunan back-end melalui Node.js dan menyokong pembangunan stack penuh.

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.


Alat AI Hot

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

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

Undress AI Tool
Gambar buka pakaian secara percuma

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

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),
