4

如何包含 /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 是 /vendor 文件夹的有效 url:

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';

但我收到错误 App 未定义。(来自base.html.twig)。App 在apps.js 中声明,但不被全局识别。

如何解决?

我正在运行 Symfony-BETA4

4

2 回答 2

1

也许使用 base.html.twig 的唯一 createSharedEntry 会更好?看看我的反应应用程序示例:

.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

于 2017-11-29T18:26:09.247 回答
-1

假设您正在使用的包具有存储资产的 Resources\Public 文件夹,您可以使用命令行:

php bin/console assets:install

默认情况下,这会将所有供应商 Resource\Public 复制到您的 Web 目录。Symfony 博客中提供了更多选项,涵盖了这一点。将所有资产保存在 Web 目录中被认为是Symfony 的最佳实践。它允许有限的面向公众的组件。

于 2017-11-26T13:13:29.780 回答