پرش به مطلب اصلی

مانیفست بستهٔ آرتیفکت

شناسهٔ شِما: artifact-package@1 شِمای ماشین‌خوان: artifact-package.schema.json نام فایل درون آرشیو: parsware.json، در ریشهٔ آن

همان چیزی که یک پوشه از خروجی باندلر را به چیزی تبدیل می‌کند که پلتفرم بتواند بپذیرد. npm run pack آن را کنار خروجی بیلد می‌نویسد و با آن zip می‌کند؛ پلتفرم هنگام بارگذاری آن را می‌خواند، و آرشیوی که با دست سرهم شده باشد دقیقاً با همان قاعده‌ای رد می‌شود که یک آرشیو تولیدشده (قاعدهٔ تک‌مسیرِ اعتبارسنجی، بخش ۶.۷).

چرا وجود دارد​

ثبت کنترل پیش‌تر شش فیلد از سازنده می‌خواست که دو تای آن‌ها از پیکربندی باندلر رونویسی می‌شد: اسکوپ Module Federation و ماژول ارائه‌شده. اشتباه در هرکدام یک نشانهٔ واحد داشت — کنترل بارگذاری نمی‌شد — بدون هیچ سرنخی که کدام‌یک غلط بوده است. بیلد هر دو را از پیش می‌داند، پس آن‌ها را می‌نویسد.

شکل​

فیلدنوعاجبارییادداشت‌ها
formatVersionintegerبلهباید دقیقاً 1 باشد. یک const است نه یک کمینه، تا آرشیوی از قالبی آینده با پیامی روشن رد شود، نه اینکه با قواعد امروز خوانده شود و جایی کم‌آشکارتر شکست بخورد.
kindstringبلهCustomControl. اپلیکیشن‌های سفارشی هنگامی به این فهرست می‌پیوندند که بسته را بپذیرند — از همان ذخیره‌گاه، حافظهٔ میانی و نقطهٔ سرو استفاده خواهند کرد و تنها در فیلدهای ویژهٔ هر نوع در این مانیفست تفاوت خواهند داشت.
logicalNamestringبلهبا پیشوند ناشر، snake_case کوچک (مثلاً par_signature_pad). هنگام بارگذاری در برابر پیشوند ناشرِ راهکار مالک بررسی می‌شود، تا آرشیوی از جای دیگر نتواند یک پیشوند را از آنِ خود کند.
displayNamestringبلهنام خوانا که در پالت فیلدهای طراح فرم دیده می‌شود.
descriptionstring | nullخیرتوصیف کوتاه، حداکثر ۵۱۲ نویسه.
versionstringبلهنسخهٔ سه‌بخشی (1.2.3)، همان نسخهٔ npm خودِ کنترل. برای عیب‌یابی ثبت می‌شود و به سازنده‌ای نشان داده می‌شود که بررسی می‌کند آنچه نصب است همان چیزی است که ساخته؛ چیزی را کنترل نمی‌کند.
scopestringبلهاسکوپ کانتینر Module Federation، خوانده‌شده از پیکربندی federation در بیلد.
modulestringبلهمسیر ماژول ارائه‌شده (مثلاً ./Control)، خوانده‌شده از نگاشت exposes در پیکربندی federation.
entrystringبلهفایل ورودی کانتینر درون آرشیو (مثلاً remoteEntry.js). یک نام فایل ساده است نه یک مسیر: فایلی در ریشهٔ آرشیو را نام می‌برد، که همان مسیر پایه‌ای است که پلتفرم تکه‌های ناهم‌زمان آرتیفکت را از آن سرو می‌کند.
substitutesForstring[]برای CustomControl بلهخانواده‌های نوع‌دادهٔ فیلدی که کنترل می‌تواند به آن‌ها بسته شود. باید دقیقاً با فهرست custom-control-manifest@1 بخواند.
requestedScopesstring[]برای CustomApp بلهدامنه‌های OAuth که یک برنامهٔ سفارشی اعلام می‌کند نیاز دارد، و هنگام صدور توکن زمینهٔ برنامه‌اش درخواست می‌شود (§۶٫۳). برای یک کنترل سفارشی نیست، که هیچ اعلام نمی‌کند — با دسترسی‌های خودِ کسی که از آن استفاده می‌کند اجرا می‌شود (§۲۸).

مقادیر از کجا می‌آیند​

دو منبع، و هیچ‌کدام دربارهٔ نیمهٔ دیگری حدس نمی‌زند:

  • scope، module، entry از mf-manifest.json خودِ بیلد خوانده می‌شوند، چون باندلر دربارهٔ آن‌ها تصمیم می‌گیرد. @module-federation/vite این فایل را تنها وقتی می‌سازد که با manifest: true پیکربندی شده باشد، که به‌صورت پیش‌فرض خاموش است — پس هر کنترل پارس‌ور آن را روشن می‌کند، و بسته‌ساز اگر نبود حدس نمی‌زند.
  • logicalName، displayName، description، substitutesFor از یک بلوک parsware در package.json کنترل می‌آیند، چون باندلر هرگز نامی از هیچ‌کدامشان نشنیده است. version همان version آن فایل است.

آنچه عمداً غایب است​

نه اسکوپ اعلام‌شده‌ای هست و نه جدول اعلام‌شده‌ای. یک آرتیفکت با دسترسی‌های همان کسی اجرا می‌شود که از آن استفاده می‌کند (§۲۴)، پس فهرست اسکوپ روی آرتیفکت همیشه تنها می‌توانست کاربرش را تنگ‌تر کند، نه گشوده‌تر.

نشانی remote-entry هم نیست. بسته از نشانی خودِ پلتفرم و از مسیری سرو می‌شود که از محیط و نام منطقی محاسبه می‌شود، و همین است که به یک کنترل اجازه می‌دهد درون راهکارش جابه‌جا شود به‌جای اینکه از میزبانی بیرونی گرفته شود.

پلتفرم چه چیزهایی را بررسی می‌کند​

هنگام بارگذاری، پیش از ذخیرهٔ هر چیزی:

۱. آرشیو در محدودهٔ اندازهٔ فشرده است و یک zip خواندنی است؛ ۲. بیش از تعداد پیکربندی‌شدهٔ فایل ندارد و بیش از مجموع پیکربندی‌شده باز نمی‌شود (هم هنگام خواندن بررسی می‌شود و هم هنگام استخراج — طول اعلام‌شده در سرآیند یک zip، ادعایی است که آرشیو دربارهٔ خودش می‌کند)؛ ۳. مسیر هر ورودی نسبی و امن است — ..، مسیر ریشه‌دار، و پیشوند درایو یا UNC ویندوز رد می‌شوند نه پاک‌سازی، چون آرشیوی که مسیری بیرون از پوشهٔ خودش را نام می‌برد آرشیوی نیست که بی‌صدا تعمیرش کنیم؛ ۴. هر فایل پسوندی دارد که در فهرست مجاز سروِ پلتفرم است؛ ۵. parsware.json در ریشه هست و با این شِما می‌خواند؛ ۶. kind با نقطهٔ پایانی می‌خواند، و فایلی که entry نام می‌برد واقعاً حاضر است.

مرتبط​