【问题标题】:Symfony and Encore print css in page for critical pathSymfony 和 Encore 在页面中打印关键路径的 css
【发布时间】:2020-07-31 09:53:37
【问题描述】:

是否可以在页面中打印 css 而不是使用 {{ encore_entry_link_tags('app') }} 生成链接标签?或者是否有其他解决方案来整合关键路径?

【问题讨论】:

    标签: symfony webpack-encore


    【解决方案1】:

    由于声誉低,我无法添加评论,但请查看symfonycasts 提供了完整的解决方案。

    基本上你应该解析 entrypoints.json 文件,找到你需要的合适的 css 文件。您可以为此使用EntrypointLookupInterface。然后获取该文件的内容并通过漂亮的自己的树枝扩展将其返回到模板。

    class AppExtension extends AbstractExtension implements ServiceSubscriberInterface
    {
    
        private $publicDir;
        public function __construct(ContainerInterface $container, string $publicDir)
        {
            $this->publicDir = $publicDir;
        }
    
        public function getFunctions(): array
        {
            return [
                new TwigFunction('encore_entry_css_source', [$this, 'getEncoreEntryCssSource']),
            ];
        }
    
        public function getEncoreEntryCssSource(string $entryName): string
        {
            $files = $this->container
                ->get(EntrypointLookupInterface::class)
                ->getCssFiles($entryName);
            $source = '';
            foreach ($files as $file) {
                $source .= file_get_contents($this->publicDir.'/'.$file);
            }
            return $source;
        }
    
        public static function getSubscribedServices()
        {
            return [
                EntrypointLookupInterface::class,
            ];
        }
    }
    

    您还必须将 publicDir 添加到您的 config/services.yaml 文件中

    services:
        _defaults:
            bind:
                string $publicDir: '%kernel.project_dir%/public'
    

    然后在树枝模板中

    {% apply inky_to_html|inline_css(encore_entry_css_source('email')) %}
    {% endapply %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多