Включение ресурсов в представление лезвия пакета - Laravel

Я создаю пакет с использованием Laravel 5.4. Мне нужно включить некоторые ресурсы (js, CSS и изображения) в шаблон лезвия. Как я могу этого добиться?

Я пробовал asset (), но он не работает.

Вот структура папок моего пакета:

root
  --package
     -- vendor_name
        -- package_name
           -- src
              -- assets
                 -- js
                    -- login.js
                 --css
                    -- login.css
              -- views
                 -- login.blade.php  

Возможно ли это без публикации в общей папке?

Спасибо


person Parth Vora    schedule 10.05.2017    source источник
comment
asset() предоставляет путь к общедоступному каталогу вашего проекта laravel. Кажется, ваши файлы находятся в каталоге поставщика. Это правильно?   -  person Sapnesh Naik    schedule 10.05.2017
comment
Это невозможно так, как вы. Браузер попытается загрузить ссылки CSS и источники Javascript с помощью HTTP-запросов, и единственная папка, открытая для HTTP-запросов для Laravel, - это общая папка. Поскольку вы говорите о пакете, а многие установки следуют передовым практикам, вы должны переместить их в общую папку, как уже предлагают ответы.   -  person Hilmi Erdem KEREN    schedule 11.05.2017


Ответы (2)


В Laravel 5.4 вы можете использовать функцию смешивания, гораздо лучше, если вы хотите использовать версии

<script src="{{ mix('js/login.js') }}"></script>

см. Компиляция активов (Laravel Mix)

https://laravel.com/docs/5.4/mix

mix.js(['resources/assets/js/app.js'], 'public/js')
        .sass('resources/assets/sass/app.scss', 'public/css')
        .styles([
            'node_modules/animate.css/animate.css',
            'node_modules/icheck/skins/flat/green.css',
            'node_modules/flatpickr/dist/flatpickr.css',
            'node_modules/gentelella/vendors/switchery/dist/switchery.min.css',
            'node_modules/ion-rangeslider/css/ion.rangeSlider.css',
            'node_modules/ion-rangeslider/css/ion.rangeSlider.skinFlat.css',
            'node_modules/gentelella/vendors/google-code-prettify/bin/prettify.min.css',
            //bootstrap modal carousel.js
            //'node_module/bootstrap-modal-carousel/dist/css/bootstrap-modal-carousel.css',
            'node_modules/gentelella/build/css/custom.css',
            'resources/assets/css/custom.css'
        ], 'public/css/custom.css')
        .copy('node_modules/gentelella/vendors/switchery/dist/switchery.min.js', 'public/js/switchery.min.js')
        .copy('node_modules/gentelella/vendors/switchery/dist/switchery.min.css', 'public/css/switchery.min.css')
        .copy('resources/assets/images', 'public/images')
        .copy('node_modules/ion-rangeslider/img', 'public/img')
        .copy('node_modules/icheck/skins/flat/green.png', 'public/css')
        .copy('node_modules/icheck/skins/flat/[email protected]', 'public/css').version();
person Mohammed Zaki    schedule 10.05.2017
comment
Похоже, вы не поняли мой вопрос. - person Parth Vora; 10.05.2017
comment
Нет, вы можете поместить то, что вам нужно, в webpack.mix.js, а затем скомпилировать его, я вас понимаю, но я имею в виду, что так лучше. посмотрите обновленный код - person Mohammed Zaki; 10.05.2017

Вы можете создать в своем config/filesystem.php новый диск, указывающий на эту папку.

'package' => [
            'driver' => 'package',
            'root' => base_path('package'),
        ],

в лезвии

{{ Storage::disk('package')->url('vendor_name/package_name/src/assets/js/login.js') }}

настраиваемый каталог для представлений

чтобы отредактировать это, вы должны войти в config/view.php и добавить свои пути base_path('package/vendor_name/package_name/src/views') для каждого пакета.

'paths' => [
        resource_path('views'),
        base_path('package/vendor_name/package_name/src/views'),
    ],
person Angus Simons    schedule 10.05.2017