Skip to main content

Rivojlanish


Rivojlantirish qo‘llanmasi

Faqat inglizchani tahrir qiling; tarjimalar avtomatik tarqaladi

Hujjatlarni faqat website/docs (Inglizcha) ostida yangilang. website/i18n/<locale>/… ostidagi tarjimalar avtomatik yaratiladi va qo‘lda tahrir qilinmasligi kerak. Mahalliylashtirilgan mazmunni yangilash uchun tarjima vazifalaridan (masalan, make translate_web_docs_batch) foydalaning.

Old shartlar

  • Node.js 22+ va npm (Node 22 bilan sinovdan o‘tgan)
  • Thunderbird 128 ESR yoki yangiroq (qo‘lda test qilish uchun)

Loyiha tuzilmasi (umumiy ko‘rinish)

  • Ildiz (root): qadoqlash skripti distribution_zip_packer.sh, hujjatlar, skrinshotlar
  • sources/: asosiy qo‘shimcha kodi (background, options/popup UI, manifestlar, ikonlar)
  • tests/: Vitest to‘plami
  • website/: Docusaurus hujjatlari (i18n website/i18n/de/... ostida)

O‘rnatish va asboblar

  • Ildiz bog‘liqliklarini o‘rnatish: npm ci
  • Hujjatlar (ixtiyoriy): cd website && npm ci
  • Maqsadlarni ko‘rish: make help

Jonli ishlab chiqish (web‑ext run)

  • Firefox Desktop’da tezkor aylanish (faqat UI smoke-testlar):
  • npx web-ext run --source-dir sources --target=firefox-desktop
  • Thunderbird’da ishga tushirish (MailExtensions uchun afzal):
  • npx web-ext run --source-dir sources --start-url about:addons --firefox-binary "$(command -v thunderbird || echo /path/to/thunderbird)"
  • Maslahatlar:
  • Thunderbird’ning Error Console oynasini ochiq tuting (Tools → Developer Tools → Error Console).
  • MV3 hodisa sahifalari bekor turganda to‘xtatiladi; kod o‘zgargandan so‘ng qo‘shimchani qayta yuklang yoki web‑ext avtomatik qayta yuklashiga ruxsat bering.
  • Faqat Firefox’da mavjud ayrim xatti-harakatlar farq qiladi; API mosligini har doim Thunderbird’da tekshirib ko‘ring.
  • Thunderbird binar yo‘llari (misollar):
  • Linux: thunderbird (masalan, /usr/bin/thunderbird)
  • macOS: /Applications/Thunderbird.app/Contents/MacOS/thunderbird
  • Windows: "C:\\Program Files\\Mozilla Thunderbird\\thunderbird.exe"
  • Profilni ajratish: Kundalik sozlamalaringizga ta’sir qilmaslik uchun ishlab chiqish uchun alohida Thunderbird profilidan foydalaning.

Make maqsadlari (alfavit tartibida)

Makefile umumiy ishlab chiqish oqimlarini standartlashtiradi. Har bir maqsadning bir qatorli qisqacha bayonini ko‘rish uchun istalgan vaqtda make help ni ishga tushiring.

Maslahat: make ni maqsadsiz ishga tushirsangiz, maqsad tanlash uchun oddiy Whiptail menyusi ochiladi.

MaqsadBir qatorli tavsif
cleanMahalliy build/preview artefaktlarini olib tashlash (tmp/, web-local-preview/, website/build/).
commitFormatlash, testlarni ishga tushirish (i18n ham), changelog’ni yangilash, commit va push.
eslintESLint’ni flat config orqali ishga tushirish (npm run -s lint:eslint).
helpBarcha maqsadlarni bir qatorli tavsiflar bilan ro‘yxatlash (saralangan).
lintsources/ ustida web‑ext lint (vaqtinchalik manifest; ZIPlarni e’tiborsiz qoldiradi; halokatli emas).
menuMaqsad va ixtiyoriy argumentlarni tanlash uchun interaktiv menyu.
packATN va LOCAL ZIPlarni qurish (linterni ishga tushiradi; packer skriptini chaqiradi).
prettierRepodan joyida formatlash (o‘zgarishlarni yozadi).
prettier_checkPrettier tekshiruv rejimida (yozishsiz); qayta format talab qilinsa muvaffaqiyatsiz tugaydi.
prettier_writeprettier uchun taxallus.
testPrettier (yozish), ESLint, so‘ng Vitest (agar sozlangan bo‘lsa, qamrov).
test_i18nFaqat i18n testlari: qo‘shimcha uchun placeholder/paritet + veb-sayt pariteti.
translate_apptranslation_app uchun taxallus.
translation_appIlova UI satrlarini sources/_locales/en/messages.json dan tarjima qilish.
translate_web_docs_batchVeb-sayt hujjatlarini OpenAI Batch API orqali tarjima qilish (afzal).
translate_web_docs_syncVeb-sayt hujjatlarini sinxron tarzda tarjima qilish (meros, non-batch).
translate_web_indextranslation_web_index uchun taxallus.
translation_web_indexBosh sahifa/navbar/footer UI ni tarjima qilish (website/i18n/en/code.json → .../<lang>/code.json).
web_buildHujjatlarni website/build ga qurish (--locales / BUILD_LOCALES ni qo‘llab-quvvatlaydi).
web_build_linkcheckOffline-xavfsiz havola tekshiruvi (masofaviy HTTP[S]ni o‘tkazib yuboradi).
web_build_local_previewMahalliy gh-pages preview; 8080–8090 portlarda avtomatik xizmat; ixtiyoriy testlar/havola tekshiruvi.
web_push_githubwebsite/build ni gh-pages tarmog‘iga push qilish.

Opsiyalar uchun sintaksis

  • make <command> OPTS="…" orqali opsiyalarni uzating (qo‘shtirnoq tavsiya etiladi). Quyida har bir maqsad uchun namunaviy foydalanish ko‘rsatilgan.

--

Lokalelarni qurish bo‘yicha maslahatlar

  • Lokalelarning kichik to‘plamini qurish: BUILD_LOCALES="en de" ni o‘rnating yoki veb maqsadlariga OPTS="--locales en,de" ni bering.
  • Muayyan lokeleni ko‘rish: http://localhost:<port>/Thunderbird-Reply-with-Attachments/de/.

Qurish va qadoqlash

  • ZIPlarni qurish: make pack
  • Repo ildizida ATN va LOCAL ZIPlarni hosil qiladi (artefaktlarni qo‘lda tahrir qilmang)
  • Maslahat: qadoqlashdan oldin versiyani sources/manifest_ATN.json va sources/manifest_LOCAL.json ikkalasida ham yangilang
  • Qo‘lda o‘rnatish (dev): Thunderbird → Tools → Add‑ons and Themes → tishli → Install Add‑on From File… → qurilgan ZIPni tanlang

Test

  • To‘liq to‘plam: make test (Vitest)
  • Qamrov (ixtiyoriy):
  • npm i -D @vitest/coverage-v8
  • make test ni ishga tushiring; HTML hisobot uchun coverage/index.html ni oching
  • Faqat i18n: make test_i18n (UI kalitlari/placeholderlar/sarlavhalar + veb-sayt bo‘yicha har lokaledagi har hujjat pariteti, id/title/sidebar_label tekshiruvlari bilan)

Nosozliklarni bartaraf etish jurnallari

  • Error Console: Tools → Developer Tools → Error Console
  • Ishlash vaqtida batafsil loglarni yoqib/o‘chirish:
  • Yoqish: messenger.storage.local.set({ debug: true })
  • O‘chirish: messenger.storage.local.set({ debug: false })
  • Javoblarni tuzish/jo‘natish vaqtida loglar ko‘rinadi

Hujjatlar (veb-sayt)

  • Dasturlash serveri: cd website && npm run start
  • Statik saytni qurish: cd website && npm run build
  • Make dagi ekvivalentlar (alfavit bo‘yicha): make web_build, make web_build_linkcheck, make web_build_local_preview, make web_push_github
  • Foydalanish misollari:
  • Faqat EN, testlar/havola tekshiruvini o‘tkazib yuborish, push yo‘q: make web_build_local_preview OPTS="--locales en --no-test --no-link-check --dry-run"
  • Barcha lokalelar, testlar/havola tekshiruvi bilan, so‘ng push: make web_build_local_preview && make web_push_github
  • Nashr qilishdan oldin, offline-xavfsiz havola tekshiruvi: make web_build_linkcheck ni ishga tushiring.
  • i18n: Inglizcha website/docs/*.md ostida; Nemischa tarjimalar website/i18n/de/docusaurus-plugin-content-docs/current/*.md ostida
  • Qidiruv: Agar CI’da Algolia DocSearch muhit o‘zgaruvchilari (DOCSEARCH_APP_ID, DOCSEARCH_API_KEY, DOCSEARCH_INDEX_NAME) o‘rnatilgan bo‘lsa, sayt Algolia qidiruvdan foydalanadi; aks holda mahalliy qidiruvga qaytadi. Bosh sahifada qidiruv oynasini ochish uchun / yoki Ctrl+K tugmalarini bosing.

  • website/src/pages/donate.js
  • Marshrut: /donate (va /<locale>/donate)
  • Xulq-atvor:
  • Agar joriy marshrutda lokali bo‘lsa (masalan, /de/donate), undan foydalaning
  • Aks holda, navigator.languages va sozlangan lokalelar orasidan eng mosini tanlang; sukut bo‘yicha lokalga qayting
  • Yo‘naltiradi:
  • en/docs/donation
  • boshqalar → /<locale>/docs/donation
  • To‘g‘ri baseUrl ishlov berish uchun useBaseUrl dan foydalanadi
  • Zaxira sifatida meta refresh + noscript havolasini o‘z ichiga oladi


Oldindan ko‘rish bo‘yicha maslahatlar

  • Node preview’ni toza to‘xtatish: http://localhost:<port>/__stop ni oching (Local server started dan keyin chop etiladi).
  • Agar MDX/JSX’da rasmlar yuklanmasa, saytning baseUrl ga rioya qilish uchun useBaseUrl('/img/...') dan foydalaning.
  • Oldindan ko‘rish avval boshlanadi; havola tekshiruvi keyin ishlaydi va to‘xtatmaydi (singan tashqi havolalar preview’ni to‘xtatmaydi).
  • Masalan, preview URL: http://localhost:<port>/Thunderbird-Reply-with-Attachments/ (“Local server started”dan keyin chiqariladi).
  • Havola tekshiruvidagi tashqi havolalar: Ba’zi tashqi saytlar (masalan, addons.thunderbird.net) avtomatlashtirilgan kravlerlarni bloklaydi va havola tekshiruvida 403 ko‘rsatishi mumkin. Preview baribir boshlanadi; bularni e’tiborsiz qoldirish xavfsiz.

Veb-saytni tarjima qilish

Nimani tarjima qilishingiz mumkin

  • Faqat veb-sayt UI: bosh sahifa, navbar, footer va boshqa UI satrlari. Hozircha hujjatlar mazmuni faqat inglizchada qoladi.

Qayerda tahrir qilish

  • website/i18n/<locale>/code.json ni tahrir qiling (en ni namunaviy sifatida foydalaning). {year}, {slash}, {ctrl}, {k}, {code1} kabi placeholderlarni o‘zgartirmang.

Fayllarni yaratish yoki yangilash

  • Barcha lokalelar uchun yetishmayotgan stublarni yaratish: npm --prefix website run i18n:stubs
  • Yangi satrlar qo‘shilgach, stublarni inglizchadan qayta yozish: npm --prefix website run i18n:stubs:force
  • Yagona lokali uchun muqobil: npx --prefix website docusaurus write-translations --locale <locale>

Bosh sahifa/navbar/footer UI satrlarini tarjima qilish (OpenAI)

  • Bir marta ishonch ma’lumotlarini o‘rnating (shell yoki .env):
  • export OPENAI_API_KEY=sk-...
  • Ixtiyoriy: export OPENAI_MODEL=gpt-4o-mini
  • Bir martalik (barcha lokalelar, en ni o‘tkazib yuborish): make translate_web_index
  • Muayyan lokalelarga cheklash: make translate_web_index OPTS="--locales de,fr"
  • Mavjud qiymatlarni qayta yozish: make translate_web_index OPTS="--force"

Tasdiqlash va qayta urinishlar

  • Tarjima skripti JSON tuzilishini tekshiradi, jingalak qavsli placeholderlarni saqlaydi va URL’lar o‘zgarmasligini ta’minlaydi.
  • Tasdiqlash muvaffaqiyatsiz bo‘lsa, mavjud qiymatlarni qoldirishdan oldin 2 martagacha fikr-mulohaza bilan qayta urinadi.

Lokaleni oldindan ko‘rish

  • Dasturlash serveri: npm --prefix website run start
  • http://localhost:3000/<locale>/Thunderbird-Reply-with-Attachments/ manziliga tashrif buyuring

Yuborish

  • Tahrir qilingan code.json fayl(lar)i bilan PR oching. O‘zgarishlarni aniq saqlang va imkon bo‘lsa tezkor skrinshot qo‘shing.

Xavfsizlik va konfiguratsiya bo‘yicha maslahatlar

  • sources/manifest.json ni commit qilmang (build vaqtincha yaratadi)
  • Yangilash kanalini saqlash uchun browser_specific_settings.gecko.id ni barqaror saqlang

Sozlamalarni saqlab qolish

  • Saqlash: Barcha foydalanuvchi sozlamalari storage.local da saqlanadi va qo‘shimcha yangilanishlari davomida saqlanib qoladi.
  • O‘rnatish: Standartlar faqat kalit butunlay yo‘q bo‘lsa (undefined) qo‘llanadi.
  • Yangilash: Migratsiya faqat yetishmayotgan kalitlarni to‘ldiradi; mavjud qiymatlar hech qachon qayta yozilmaydi.
  • Sxema belgisi: settingsVersion (hozirda 1).
  • Kalitlar va standartlar:
  • blacklistPatterns: string[]['*intern*', '*secret*', '*passwor*']
  • confirmBeforeAdd: booleanfalse
  • confirmDefaultChoice: 'yes'|'no''yes'
  • warnOnBlacklistExcluded: booleantrue
  • Kod: qarang sources/background.jsinitializeOrMigrateSettings() va SCHEMA_VERSION.

Dasturlash jarayoni (yangi sozlama qo‘shish)

  • sources/background.js ichida SCHEMA_VERSION ni oshiring.
  • Yangi kalit + standartni initializeOrMigrateSettings() dagi DEFAULTS obyektiga qo‘shing.
  • Standartlarni urug‘lashda “faqat undefined bo‘lsa” qoidasidan foydalaning; mavjud qiymatlarni qayta yozmang.
  • Agar sozlama foydalanuvchiga ko‘rinadigan bo‘lsa, uni sources/options.js ga ulang va mahalliylashtirilgan satrlarni qo‘shing.
  • Testlarni qo‘shing/sozlang (tests/background.settings.migration.test.js ga qarang).

Qo‘lda test qilish bo‘yicha maslahatlar

  • Yangi o‘rnatishni simulyatsiya qiling: kengaytmaning ma’lumotlar katalogini tozalang yoki yangi profil bilan boshlang.
  • Yangilanishni simulyatsiya qiling: storage.local ichida settingsVersion ni 0 ga o‘rnating va qayta yuklang; mavjud qiymatlar o‘zgarmaganini va faqat yetishmayotgan kalitlar qo‘shilganini tasdiqlang.

Nosozliklarni bartaraf etish

  • Thunderbird 128 ESR yoki yangiroq ekanini tekshiring
  • Ishlash vaqtidagi muammolar uchun Error Console’dan foydalaning
  • Agar saqlangan sozlamalar to‘g‘ri qo‘llanmagandek ko‘rinsa, Thunderbird’ni qayta ishga tushiring va yana urinib ko‘ring. (Thunderbird seanslar orasida holatni keshlashi mumkin; qayta ishga tushirish yangi sozlamalar yuklanishini ta’minlaydi.)

CI va qamrov

  • GitHub Actions (CI — Tests) vitest’ni qamrov chegaralari bilan ishga tushiradi (85% satrlar/funksiyalar/tarmoqlar/bayonotlar). Chegaralar bajarilmasa, ish muvaffaqiyatsiz tugaydi.
  • Ish jarayoni HTML hisobot bilan coverage-html artefaktini yuklaydi; uni run sahifasidan yuklab oling (Actions → so‘nggi run → Artifacts).

Hissa qo‘shish

  • Branch/commit/PR bo‘yicha ko‘rsatmalar uchun CONTRIBUTING.md’ni ko‘ring
  • Maslahat: Kundalik profilingizga ta’sir qilmaslik uchun test uchun alohida Thunderbird ishlab chiqish profilini yarating.

Tarjimalar

  • Katta “all → all” tarjima ishlarini bajarish sekin va qimmat bo‘lishi mumkin. Avval kichik to‘plamdan boshlang (masalan, bir necha hujjat va 1–2 lokali), natijani ko‘rib chiqing, so‘ng kengaytiring.

  • Qayta urinish siyosati: tarjima ishlarida API xatolarida eksponensial kechikish bilan 3 martagacha qayta urinish amalga oshiriladi; scripts/translate_web_docs_batch.js va scripts/translate_web_docs_sync.js ga qarang.

Hujjatlar uchun skrinshotlar

  • Rasmlarni website/static/img/ ostida saqlang.

  • Ularni MD/MDX’da useBaseUrl('/img/<filename>') orqali ko‘rsating, shunda yo‘llar saytning baseUrl bilan mos ishlaydi.

  • website/static/img/ ostida rasmlar qo‘shilgandan yoki qayta nomlangandan so‘ng, barcha havolalar hanuz useBaseUrl('/img/…') dan foydalanayotganini va mahalliy preview’da render bo‘layotganini tasdiqlang. Favikonlar

  • Ko‘p o‘lchamli favicon.ico barcha build yo‘llarida (Make + skriptlar) website/scripts/build-favicon.mjs orqali avtomatik yaratiladi.

  • Qo‘lda hech qanday qadam talab qilinmaydi; icon-*.png ni yangilash kifoya. Ko‘rib chiqish maslahati

  • Tarjima qilingan hujjatlarda front‑matter dagi id ni o‘zgartirmang; bo‘lsa faqat title va sidebar_label ni tarjima qiling.

clean

  • Maqsad: mahalliy build/preview artefaktlarini olib tashlash.
  • Foydalanish: make clean
  • Quyidagilarni olib tashlaydi (agar mavjud bo‘lsa):
  • tmp/
  • web-local-preview/
  • website/build/

commit

  • Maqsad: formatlash, test, changelog’ni yangilash, commit va push.
  • Foydalanish: make commit
  • Tafsilotlar: Prettier (yozish), make test, make test_i18n ni ishga tushiradi; stage qilingan farqlar bo‘lsa, changelog’ga qo‘shimcha qiladi; origin/<branch> ga push qiladi.

eslint

  • Maqsad: ESLint’ni flat config orqali ishga tushirish.
  • Foydalanish: make eslint

help

  • Maqsad: barcha maqsadlarni bir qatorli tavsiflar bilan ro‘yxatlash.
  • Foydalanish: make help

lint

  • Maqsad: MailExtension’ni web-ext yordamida lint qilish.
  • Foydalanish: make lint
  • Eslatma: vaqtinchalik sources/manifest_LOCAL.jsonsources/manifest.json nusxa ko‘chiradi; qurilgan ZIPlarni e’tiborsiz qoldiradi; ogohlantirishlar konveyerni to‘xtatmaydi.

menu

  • Maqsad: Make maqsadini va ixtiyoriy argumentlarni tanlash uchun interaktiv menyu.
  • Foydalanish: make ni argumentlarsiz ishga tushiring.
  • Eslatma: agar whiptail mavjud bo‘lmasa, menyu make help ga qaytadi.

pack

  • Maqsad: ATN va LOCAL ZIPlarni qurish (lint ga bog‘liq).
  • Foydalanish: make pack
  • Maslahat: qadoqlashdan oldin sources/manifest_*.json ikkalasida ham versiyalarni oshiring.

prettier

  • Maqsad: repozitoriyani joyida formatlash.
  • Foydalanish: make prettier

prettier_check

  • Maqsad: formatlashni tekshirish (yozishsiz).
  • Foydalanish: make prettier_check

prettier_write

  • Maqsad: prettier uchun taxallus.
  • Foydalanish: make prettier_write

test

  • Maqsad: Prettier (yozish), ESLint, so‘ng Vitest (o‘rnatilgan bo‘lsa qamrov) ni ishga tushirish.
  • Foydalanish: make test

test_i18n

  • Maqsad: qo‘shimcha satrlari va veb-sayt hujjatlari uchun i18n-ga yo‘naltirilgan testlar.
  • Foydalanish: make test_i18n
  • Ishga tushiriladi: npm run test:i18n va npm run -s test:website-i18n.

translate_app / translation_app

  • Maqsad: qo‘shimcha UI satrlarini EN dan boshqa lokalelarga tarjima qilish.
  • Foydalanish: make translation_app OPTS="--locales all|de,fr"
  • Eslatma: kalit tuzilmasi va placeholderlar saqlanadi; translation_app.log ga log yozadi. Skript ko‘rinishi: node scripts/translate_app.js --locales ….

translate_web_docs_batch / translate_web_docs_sync

  • Maqsad: veb-sayt hujjatlarini website/docs/*.md dan website/i18n/<locale>/... ga tarjima qilish.
  • Afzal: translate_web_docs_batch (OpenAI Batch API)
    • Foydalanish (flaglar): make translate_web_docs_batch OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>"
    • Merosdagi pozitsion hali ham qabul qilinadi: OPTS="<doc|all> <lang|all>"
  • Xulq-atvor: JSONL tuzadi, yuklaydi, har 30 soniyada so‘raydi, natijalarni yuklab oladi, fayllarni yozadi.
  • Eslatma: batch ishi yakunlanishi 24 soatgacha vaqt olishi mumkin (OpenAI batch oynasiga ko‘ra). Konsolda har bir so‘rovda o‘tgan vaqt ko‘rsatiladi.
  • Muhit: OPENAI_API_KEY (majburiy), ixtiyoriy OPENAI_MODEL, OPENAI_TEMPERATURE, OPENAI_BATCH_WINDOW (sukut bo‘yicha 24 soat), BATCH_POLL_INTERVAL_MS.
  • Meros: translate_web_docs_sync
    • Foydalanish (flaglar): make translate_web_docs_sync OPTS="--files <doc1,doc2|all> --locales <lang1,lang2|all>"
    • Merosdagi pozitsion hali ham qabul qilinadi: OPTS="<doc|all> <lang|all>"
  • Xulq-atvor: har juftlik bo‘yicha sinxron so‘rovlar (batch agregatsiyasiz).
  • Eslatma: OPTS ko‘rsatilmaganda interaktiv so‘rovlar. Har ikkala rejim kod bloklari/inline kodni saqlaydi va front‑matter dagi id ni o‘zgartirmaydi; loglar: translation_web_batch.log (batch) yoki translation_web_sync.log (sync).

translate_web_index / translation_web_index

  • Maqsad: veb-sayt UI satrlarini (bosh sahifa, navbar, footer) website/i18n/en/code.json dan website/i18n/<locale>/code.json ostidagi barcha lokalelarga tarjima qilish (en bundan mustasno).
  • Foydalanish: make translate_web_index yoki make translate_web_index OPTS="--locales de,fr [--force]"
  • Talablar: OPENAI_API_KEY ni eksport qiling (ixtiyoriy: OPENAI_MODEL=gpt-4o-mini).
  • Xulq-atvor: JSON tuzilishini tekshiradi, jingalak qavsli placeholderlarni saqlaydi, URL’larni o‘zgartirmaydi va tasdiqlash xatolarida fikr-mulohaza bilan qayta urinadi.

web_build

  • Maqsad: hujjatlar saytini website/build ga qurish.
  • Foydalanish: make web_build OPTS="--locales en|de,en|all" (yoki BUILD_LOCALES="en de" ni o‘rnating)
  • Ichki ishlar: node ./node_modules/@docusaurus/core/bin/docusaurus.mjs build [--locale …].
  • Bog‘liqliklar: website/node_modules/@docusaurus yo‘q bo‘lsa, faqat website/ ichida npm ci ni ishga tushiradi.

web_build_linkcheck

  • Maqsad: offline-xavfsiz havola tekshiruvi.
  • Foydalanish: make web_build_linkcheck OPTS="--locales en|all"
  • Eslatma: tmp_linkcheck_web_pages ga quradi; GH Pages baseUrl ni / ga qayta yozadi; masofaviy HTTP(S) havolalarni o‘tkazib yuboradi.

web_build_local_preview

  • Maqsad: ixtiyoriy testlar/havola tekshiruvi bilan mahalliy gh‑pages preview.
  • Foydalanish: make web_build_local_preview OPTS="--locales en|all [--no-test] [--no-link-check] [--dry-run] [--no-serve]"
  • Xulq-atvor: avval Node preview serverini sinab ko‘radi (scripts/preview-server.mjs, /__stop ni qo‘llab-quvvatlaydi), python3 -m http.server ga qaytadi; 8080–8090 portlarda xizmat qiladi; PID: web-local-preview/.server.pid.

web_push_github

  • Maqsad: website/build ni gh-pages tarmog‘iga push qilish.
  • Foydalanish: make web_push_github

Maslahat: Makefile foydalanadigan paket menejerini almashtirish uchun NPM=… ni o‘rnating (sukut bo‘yicha npm).