Манифесты модулей
Обзор
- Scope
- Операционные контракты ниже high-level module lifecycle
Ключевые понятия
- Manifest Name
- Runtime-идентичность модуля из module.json; отличается от public slug.
- Manifest Slug
- Lowercase public/runtime identifier, принимаемый module asset lookup.
- Module Env
- Database overrides для значений из env.json; не произвольные редактируемые metadata модуля.
- Module Setting
- Типизированные key-value operational data, принадлежащие модулю.
- Eligible Public Runtime
- Core module или module с active database record.
Структура
- Manifest Sections
- name
- slug
- version
- priority
- is_core
- dependencies
- providers
- routes
- views
- migrations
- seeders
- assets
- site_layout_driver
- install
- autoload
- Persistent Configuration
- Declaration Defaultsmodules/<ModuleName>/env.json
- Database Overridesmodules.env JSON
- Operational Valuesтаблица module_settings
- Public Runtime
- Gateapp/Services/Modules/ModuleRuntimeGate.php
- Viewsapp/Services/Modules/ModuleViewLoader.php
- Assetsapp/Services/Modules/ModuleAssetLoader.php
Факты
- ModuleRuntimeGate разрешает public views, assets и layout drivers только для manifests с is_core или modules, active в modules table. authoritative
- ModuleViewLoader регистрирует Blade namespace из manifest views.namespace и views.path; resources/views/<namespace> имеет приоритет над module view directory. authoritative
- Отсутствующий namespaced view может вызвать targeted manifest lookup и registration, если модуль остаётся eligible для public runtime. authoritative
- Preparing views for a Site регистрирует general eligible module views и просит ModuleLayoutDriverBootstrap зарегистрировать layout driver сайта. authoritative
- ModuleAssetLoader резолвит eligible asset сначала из public/module/<slug>, затем из module Resources path через dynamic route. authoritative
- Asset lookup принимает manifest slug, normalized manifest name или normalized folder name. authoritative
- Module asset helper может добавлять module database version с fallback на manifest version. authoritative
- ModuleAssetLoader — singleton и мемоизирует URL resolution, version lookup, module directory и published/source paths в рамках одного HTTP request. authoritative
- module_settings уникален по module_id и key и хранит value, type, description и public visibility независимо от modules.env. authoritative
Инструкции
Add Module View
- объявить views.namespace и views.path в module.json
- создать view в declared module path или application override path
- убедиться, что модуль core или active
- рендерить через namespace::view и проверить runtime registration
Publish Asset
- объявить или найти module asset root
- установить или активировать модуль, или запустить module asset publication command
- запросить public module URL
- проверить dynamic fallback только если published file недоступен
Правила
Architectural rule
Не экспонируйте module Blade views, source assets или module-provided layout только потому, что папка модуля существует.
Architectural rule
Не используйте modules.env как хранилище mutable module identity, manifest или operational settings.
Примеры
Module Asset Blade
Используйте manifest slug (shop-b2c), а не runtime name (ShopB2C).
modules/ShopB2C/Views/partials/scripts.blade.php
Manifest Identity
name для isModule(); slug для module_asset(); id_marketplace только для entitlement.
{ "name": "ShopB2C", "slug": "shop-b2c", "id_marketplace": "ShopB2C" }
modules/ShopB2C/module.json