Webpack Encore: как включить js от /vendor и использовать глобально?

Как включить ресурсы из папки /vendor, чтобы я мог использовать их глобально?

мой base.html.twig:

<script src="{{ asset('build/vendor.js') }}"></script>
<script src="{{ asset('build/color-admin.js') }}"></script>
<script src="{{ asset('build/app.js') }}"></script>

<script>
    $(document).ready(function() {
        App.init();
    });
</script>

И в моем webpack.config у меня есть:

.addEntry('color-admin', [
    onePageJSFolder + '/apps.js',
    onePageCSSFolder + '/animate.css',
    onePageCSSFolder + '/style.css',
    onePageCSSFolder + '/style-responsive.css',
    onePageCSSFolder + '/theme/orange.css',
])

где onePageJSVolder - это действительный URL-адрес папки /vendor:

var frontend = './vendor/suvya/color-admin-3/frontend';
var onePage = frontend + '/one-page-parallax/template_content_html';
var onePageAssetsFolder = onePage + '/assets';
var onePagePluginsFolder = onePageAssetsFolder + '/plugins';
var onePageCSSFolder = onePageAssetsFolder + '/css';
var onePageLessFolder = onePageAssetsFolder + '/less';
var onePageJSFolder = onePageAssetsFolder + '/js';

Но я получаю сообщение об ошибке Приложение не определено. (исходя из base.html.twig). Приложение объявлено в apps.js, но не распознается во всем мире.

Как это можно решить?

Я бегу Symfony-BETA4

2 ответа

Может быть, будет лучше использовать единственный createSharedEntry для base.html.twig? Посмотрите на мой пример приложения реакции:

.createSharedEntry('vendor', [
    'jquery',
    'bootstrap',
    'react',
    'react-dom',
    './node_modules/bootstrap/scss/bootstrap.scss'
])

Он сгенерирует три файла: vandor.css, vendor.js и manifest.js. Этот поток хорошо описан в документации и о вашей проблеме: inside Webpack, when you require a module, it does not (usually) set a global variable. Instead, it just returns a value: Вам нужно проверить глобальные переменные. Посмотрите этот пример решения проблемы jQuery с глобальной переменной, и, возможно, это поможет вам. Как я вижу, вам нужно добавить autoProvideVariables на ваш webpack.config.js

Предполагая, что используемый вами пакет имеет папку Resources\Public, в которой хранятся ресурсы, вы можете использовать командную строку:

php bin/console assets:install

По умолчанию это скопирует всех поставщиков Resource\Public в ваш веб-каталог. В блоге Symfony доступно больше опций. Лучшей практикой Symfony считается хранение всех ваших ресурсов в вашем веб-каталоге. Это учитывает ограниченные общественные компоненты.

Другие вопросы по тегам