پالت فرمان

دنبال فرمانی برای اجرا بگردید…

ZarynZaryn
بسته‌ها و میرورها·۴ دقیقه مطالعه·

ساخته‌شده روی زرین: چهار بسته برای امتحان

tinyhash (پایتون)، @arvand/envguard (npm)، portcheck (Rust) و humanize (Zig) ابزارهای واقعی‌اند که روی رجیستری‌های زرین منتشر شده‌اند و هر کدام با یک دستور نصب می‌شوند؛ هر کدام چطور ساخته، آزموده و منتشر شد، برای الگوبرداری.

چهار ابزار کوچک، برای هر اکوسیستم یکی، که روی زرین همان‌طور منتشر شده‌اند که شما بستهٔ خودتان را منتشر می‌کنید. کدشان در مخزن‌های زرین زیر [arvand](/arvand) است، و هر کدام با یک دستور و با همان ابزاری که دارید، از هر جایی نصب می‌شود: ابزار نصب هر فایل را با هش آن می‌سنجد. ```diagram type: cards title: چهار بسته، چهار اکوسیستم --- 🐍 | بستهٔ tinyhash · پایتون | اثرانگشت‌های کوتاه و پایدار برای فایل‌ها و پوشه‌ها: چیزی عوض شده؟ این همان فایل درست است؟ 📦 | بستهٔ @arvand/envguard · npm | فایل ‎.env شما در برابر ‎.env.example: کلیدهای جاافتاده، مقدارهای خالی، رازهایی که به نمونه نشت کرده‌اند 🦀 | بستهٔ portcheck · Rust | این پورت آزاد است؟ آن یکی در دسترس است؟ و صبر تا در دسترس شود ⚡ | بستهٔ humanize · Zig | بایت‌ها، مدت‌ها، شمارش‌ها و «چند وقت پیش» به شکلی که آدم‌ها می‌خوانند، بدون allocator ``` ## امتحانشان کنید ```bash # tinyhash (Python) pip install --index-url https://api.zaryn.xyz/v1/packages/pypi/all/simple/ tinyhash tinyhash --tree data/ # @arvand/envguard (npm) npx --@arvand:registry=https://api.zaryn.xyz/v1/packages/npm/ @arvand/envguard npx @arvand/envguard --ci # portcheck (Rust) cargo install --index sparse+https://api.zaryn.xyz/v1/packages/cargo/index/ portcheck portcheck --wait db:5432 # humanize (Zig) zig fetch --save https://api.zaryn.xyz/v1/packages/zig/humanize/humanize-0.1.0.tar.gz ``` صفحهٔ هر بسته: [tinyhash](/packages/pypi/tinyhash) · [envguard](/packages/npm/@arvand/envguard) · [portcheck](/packages/cargo/portcheck) · [humanize](/packages/zig/humanize) همین دستورها در [صفحهٔ بسته‌ها](/packages#made-on-zaryn) با دکمهٔ کپی هم هستند. ```diagram type: flow title: راهی که هر کدام رفت --- کد | یک مخزن زرین: zev init، zev commit، zev push | accent | 📁 ~ آزمون‌ها می‌گذرند ساخت | دستورهای python -m build، npm pack، cargo package، یک tarball برای zig | | 🔨 ~ یک توکن فقط برای انتشار انتشار | دستورهای twine upload، npm publish، cargo publish، بارگذاری بایگانی zig، به رجیستری زرین | good | 🚀 ~ هر کسی، از هر جایی نصب | ابزارهای pip، npx، cargo، zig fetch: هر فایل با هشش سنجیده می‌شود | good | ✅ ``` ## بستهٔ tinyhash (پایتون) اثرانگشت‌های کوتاه BLAKE2b، در base32، برای فایل‌ها و پوشه‌ها. ```console $ pip install --index-url https://api.zaryn.xyz/v1/packages/pypi/all/simple/ tinyhash $ tinyhash --tree src/ uwulb2m4sffp tinyhash/__init__.py zmciwvuja5wy tinyhash/cli.py xubdz6t3q7rt src/ (4 files) $ tinyhash --check kxppivxcxam2 data/ ✓ data/ matches kxppivxcxam2 $ tinyhash --diff old/ new/ + extra.txt - notes.md ~ core.py 1 added, 1 removed, 1 changed ``` نمایهٔ بالا نمایهٔ یکتای زرین است: پروژه‌های زرین، و بقیه از pypi.org، پس وابستگی‌های دیگر هم مثل همیشه نصب می‌شوند. `uv tool install --index … tinyhash` هم کار می‌کند. چطور ساخته شد: فقط کتابخانهٔ استاندارد، پایتون ۳٫۹ به بعد، ۱۶ آزمون pytest، ساخته با `python -m build` و منتشر با `twine upload` و یک توکن فقط برای انتشار. همهٔ گام‌ها: [نخستین بستهٔ پایتون خود را در ۵ دقیقه منتشر کنید](/docs/fa/publish-python-package). ## بستهٔ @arvand/envguard (npm) ```bash npx --@arvand:registry=https://api.zaryn.xyz/v1/packages/npm/ @arvand/envguard ``` برای یک پروژه، یک بار در `.npmrc` به npm بگویید `@arvand` از کجا می‌آید: ```ini @arvand:registry=https://api.zaryn.xyz/v1/packages/npm/ ``` ```bash npm install --save-dev @arvand/envguard ``` | دستور | چه می‌کند | |---|---| | `envguard` | مقایسهٔ `.env` با `.env.example` | | `envguard init` | نوشتن `.env.example` از `.env` شما، فقط کلیدها، امن برای کامیت | | `envguard --ci` | بررسی محیط واقعی (رازهای CI) به جای یک فایل | | `envguard --strict` | شکست برای مقدارهای خالی و کلیدهایی که در نمونه نیستند هم | | `envguard --json` | نتیجه به شکل JSON | نام دامنه‌دار (`@arvand/…`) را فقط صاحبش می‌تواند منتشر کند، پس کسی نمی‌تواند بسته‌ای هم‌نام را جلویش بگذارد. چطور ساخته شد: بی وابستگی، ماژول‌های ES، Node 18 به بعد، ۱۷ آزمون `node:test`، `npm publish` به زرین. همهٔ گام‌ها: [npm روی زرین](/docs/fa/packages-npm). ## بستهٔ portcheck (Rust) ```bash cargo install --index sparse+https://api.zaryn.xyz/v1/packages/cargo/index/ portcheck ``` | دستور | چه می‌کند | |---|---| | `portcheck 8080` | پورت 8080 روی این رایانه آزاد است؟ | | `portcheck host:port` | این رایانه به آن می‌رسد، و با چه سرعتی؟ | | `portcheck https://example.com` | نشانی‌ها هم کار می‌کنند: پورت از طرح نشانی می‌آید | | `portcheck --free 3000-3100` | نخستین پورت آزاد در یک بازه | | `portcheck --wait db:5432` | صبر تا جواب دهد (`--timeout 2m`) | ```bash PORT=$(portcheck --free 3000-3100) npm run dev portcheck --wait --timeout 2m postgres://db:5432 && ./migrate ``` چطور ساخته شد: فقط کتابخانهٔ استاندارد، ۹ آزمون، بی هشدار در `cargo clippy`، `cargo publish --registry zaryn`. برای یک پروژه، یک بار زرین را به `~/.cargo/config.toml` بیفزایید و `--registry zaryn` را به کار ببرید: [crateهای Rust روی زرین](/docs/fa/packages-rust). ## بستهٔ humanize (Zig) ```bash zig fetch --save https://api.zaryn.xyz/v1/packages/zig/humanize/humanize-0.1.0.tar.gz ``` ```zig // build.zig const humanize = b.dependency("humanize", .{}); exe.root_module.addImport("humanize", humanize.module("humanize")); ``` ```zig var buf: [32]u8 = undefined; const size = try humanize.bytes(&buf, 1_572_864, .{}); // "1.5 MiB" const took = try humanize.duration(&buf, 9045, .{}); // "2h 30m" ``` | تابع | چه می‌دهد | |---|---| | `bytes`، `parseBytes` | `1.5 MiB`، و برگرداندن `"10MB"` به بایت | | `duration`، `elapsed`، `parseDuration` | `2h 30m`، `1.3 µs`، و برگرداندن `"1h30m"` به نانوثانیه | | `count`، `compact` | `1,234,567`، `3.4M` | | `ago`، `ordinal`، `plural` | `3 minutes ago`، `21st`، `file`/`files` | چطور ساخته شد: بی allocator (در بافر شما می‌نویسد)، آزموده روی Zig 0.15 و 0.17، منتشر به شکل بایگانی‌ای که `zig fetch` هشش را می‌سنجد. همهٔ گام‌ها: [بسته‌های Zig روی زرین](/docs/fa/packages-zig). ## بستهٔ خودتان را بسازید ```diagram type: cards title: انتشار بستهٔ خودتان، برای هر اکوسیستم --- 🐍 | پایتون | دستورهای python -m build و twine upload به زرین: نخستین بستهٔ پایتون خود را منتشر کنید 📦 | بستهٔ npm | دستور npm publish با نامی دامنه‌دار که مال شماست: npm روی زرین 🦀 | زبان Rust | دستور cargo publish --registry zaryn: crateهای Rust روی زرین ⚡ | زبان Zig | یک tarball که zig fetch آن را می‌سنجد: بسته‌های Zig روی زرین ``` یک توکن انتشار در [صفحهٔ بسته‌ها](/packages) بسازید (فقط می‌تواند منتشر کند). نام‌ها مال کسی است که زودتر بیاید. بسته‌های عمومی در همهٔ طرح‌ها رایگان‌اند.