Короткий ответ заключается в том, что ваш комплект должен содержать Resources/public/
папку со встроенными производственными ресурсами в ней. Вы можете использовать команду assets:install
для копирования или создания символической ссылки на эти файлы в каталог public/
вашего проекта, где он будет автоматически помещен в подкаталог, названный в честь вашего пакета, например, public/bundles/appbundle/
. Затем в вашем пакете вы можете предположить, что этот путь существует, и загрузить оттуда ресурсы, например в шаблоне веточки с помощником по ассету: {{ asset('bundles/appbundle/images/my_image.jpg') }}
.
Если вы хотите использовать EasyAdminBundle в качестве справки, вот объяснение, как он там работает:
Да, EasyAdminBundle предоставляет webpack.config.js
, но он предназначен в основном для разработки и никогда не будет использоваться вашим приложением. Вместо этого конфигурация запишет производственные ресурсы в соответствующие места внутри пакета (а именно src/Resources/public
):
Encore
.setOutputPath('./src/Resources/public/')
.setManifestKeyPrefix('bundles/easyadmin')
.enableSourceMaps(false)
.enableVersioning(false)
.disableSingleRuntimeChunk()
Эти созданные ресурсы являются частью пакета (см. Ссылку выше) и всегда распространяются вместе с пакетом, поэтому нет необходимости самостоятельно создавать ресурсы внешнего интерфейса при использовании пакета. Эти производственные ресурсы затем могут быть использованы непосредственно вашим приложением, запустив команду Symfony, которая копирует внешние ресурсы в public/
-каталог вашего проекта:
php bin/console assets:install
Команда assets: install устанавливает активы пакета в заданный каталог (например, общедоступный каталог).
php bin/console assets:install public
Каталог пакетов будет создан внутри целевого каталога, и каталог Resources / public каждого пакета будет скопирован в него.
Затем в своих шаблонах вы можете полагаться на эти ресурсы с помощью префикса bundle-prefix всякий раз, когда вам требуются эти ресурсы, например для app.css
(вы можете увидеть, что это используется в файле layout.html.twig EasyAdminBundle):
{{ asset('bundles/easyadmin/app.css') }}
Если вы хотите сделать что-то подобное, вам, вероятно, придется убедиться, что настройки webpack не нарушают прямой доступ к файлам css, например фрагменты времени выполнения или управление версиями, как это делает EasyAdminBundle. В качестве альтернативы вы можете попросить пользователей вашего пакета также ссылаться на manifest.json в вашем пакете в своей конфигурации ресурсов, но тогда вам, вероятно, придется полагаться на именование пакета, которое может быть не тем, что вам нужно.
person
dbrumann
schedule
10.08.2020