انتشار پکیج و مخزنسازی
Publishing packages & running registriesکدی که فقط در پروژهٔ خودت کار میکند، یک فایل است. کدی که دیگران با یک دستور نصبش میکنند، یک محصول است. فاصلهٔ این دو، چند قرارداد ساده اما سختگیر است: نسخهگذاری، متادیتا، امضا و سازگاری. این مسیر همان فاصله را برای شش زیستبوم بزرگ میپیماید، و بعد نشان میدهد چطور مخزن خصوصی خودت را بالا بیاوری.
پیشرفت تو
درصد هر فصل از دو چیز میآید: چقدر از بخشهایش را خواندهای (۵۵٪) و چند تمرینش را تیک زدهای (۴۵٪). همهچیز داخل مرورگر خودت میماند.
فصل
فصلها به هم وابستهاند و ترتیبشان معنا دارد. هر مسیر با پروژههای نهایی تمام میشود: ساده، متوسط، پیچیده.
پکیج چیست و چرا
مرز میان «کد من» و «کدی که دیگران استفاده میکنند».
در نوبت نوشتننسخهگذاری معنایی
major.minor.patch یک قرارداد است، نه یک شماره.
در نوبت نوشتنnpm: ساخت و انتشار
package.json، فایلهای منتشرشده، و اولین publish.
در نوبت نوشتنnpm پیشرفته
scope، بستههای خصوصی، workspace و monorepo.
در نوبت نوشتنNuGet: ساخت و انتشار
csproj، متادیتا، symbol package و nuget.org.
در نوبت نوشتنPyPI: pyproject و wheel
بستهبندی مدرن پایتون، از setup.py تا build.
در نوبت نوشتنCargo و crates.io
انتشار crate و مستندسازی خودکار.
در نوبت نوشتنRubyGems
gemspec و انتشار.
در نوبت نوشتنGo modules و Maven
دو مدل متفاوت: بدون رجیستری مرکزی، و با آن.
در نوبت نوشتنمخزن خصوصی با Nexus
یک سرور، چند فرمت: npm، NuGet، PyPI و Maven.
در نوبت نوشتنگزینههای دیگر مخزن
Verdaccio، Artifactory و GitHub Packages.
در نوبت نوشتنامنیت زنجیرهٔ تأمین
امضا، provenance، SBOM و حملهٔ typosquatting.
در نوبت نوشتنانتشار خودکار با CI
انتشار روی تگ، بدون رمز روی لپتاپ کسی.
در نوبت نوشتنمستندسازی و CHANGELOG
READMEای که سؤال اول را جواب بدهد.
در نوبت نوشتننگهداری و منسوخسازی
deprecate، yank و مسئولیت در برابر کاربران.
در نوبت نوشتنپروژهٔ ۱ — اولین پکیج عمومی
یک کتابخانهٔ کوچک را واقعاً منتشر کن.
در نوبت نوشتنپروژهٔ سادهپروژهٔ ۲ — مخزن خصوصی
Nexus را بالا بیاور و از آن نصب و به آن منتشر کن.
در نوبت نوشتنپروژهٔ متوسطپروژهٔ ۳ — خط لولهٔ انتشار چندزیستبومی
یک monorepo که هم npm و هم NuGet منتشر میکند، خودکار و امضاشده.
در نوبت نوشتنپروژهٔ پیچیده