Symfony SassBundle 无法识别 .yaml 配置

问题描述 投票:0回答:1

我正在使用 AssetMapper 和 ux-twig-component 开发 Symfony 应用程序。 为了优化加载时的资源,我制作了不同的样式表。我的主要样式表是一个

.ccs
模板文件,我在大多数项目中重复使用它。

我的其他文件是我在需要时通过 AssetMapper 包含的

.scss
文件。它们基本上设置了特定
.twig
组件的样式。

我的工作树中的文件夹“assets”的屏幕截图:

{% extends 'base.html.twig' %}

{% block title %}Hello PublicController!{% endblock %}
{% block stylesheets %}
    <link rel="stylesheet" href="{{ asset('styles/insets.scss') }}">
{% endblock %}

我的问题是我无法构建我的

.scss
样式表,因为 SassBundle 只需要一个文件“app.scss”。

PS C:\Users\julie\web\web-app-mairie> php bin/console sass:build --watch
[critical] Error thrown while running command "sass:build --watch". Message: "Could not find Sass file: "C:\Users\julie\web\web-app-mairie/assets/styles/app.scss""

In SassBuilder.php line 116:
                                                                                        
  Could not find Sass file: "C:\Users\julie\web\web-app-mairie/assets/styles/app.scss"  
                                                                                        

sass:build [-w|--watch]

所以我尝试使用外部二进制文件进行构建。

PS C:\Users\julie\web\web-app-mairie> sass /assets/insets.scss /assets/insets.css
错误 :
Error reading ..\..\..\..\assets\insets.scss: Cannot open file.

我最终尝试将

.scss
文件的路径添加到根配置,就像 Symfony 文档中提到的那样。 但是我在开始时遇到了同样的错误:构建器找不到
app.scss
。 这并没有让我感到足够惊讶,因为我必须自己在 config/packages 中创建
symfonycasts_sass.yaml
文件。这是我写的:

# config/packages/symfonycasts_sass.yaml
symfonycasts_sass:
    root_sass:
        - '%kernel.project_dir%/assets/insets.scss'

我想它使用另一个配置文件......但是在哪里?我在

vendor
目录中搜索了一下,但很快就迷失了方向。

那么各位,你们知道关于这个***的事情吗?或者您有其他解决方案/建议给我吗?

php symfony symfony-assetmapper
1个回答
0
投票

好吧,经过广泛的研究,最后我决定深入我的

vendor
。我在网上找到的都是关于 Webpack Encore 的,我使用 Asset Mapper,并且没有另外安装 webpack(如果它会引起任何冲突,我不知道哈哈)。

,所以...我终于找到了我的敌人文件:

SymfonycastsSassExtension.php

Project
↳ vendor
   ↳ symfonycasts
      ↳ sass-bundle
         ↳ src
             ↳ DependencyInjection
                ↳ SymfonycastsSassExtension.php

.php
文件负责将
.yaml
配置文件加载为
TreeBuilder
类,并提取参数值作为
ArrayNodeDefinition
,然后,如果未定义,则将默认值应用于此
ArrayNodeDefinition

# it's only part of the file

#[...]

    public function getConfigTreeBuilder(): TreeBuilder
    {
        $treeBuilder = new TreeBuilder('symfonycasts_sass');

        $rootNode = $treeBuilder->getRootNode();
        \assert($rootNode instanceof ArrayNodeDefinition);

        $rootNode
            ->children()
                ->arrayNode('root_sass')
                    ->info('Path to your Sass root file')
                    ->beforeNormalization()->castToArray()->end()
                    ->cannotBeEmpty()
                    ->scalarPrototype()
                        ->end()
                    ->validate()
                        ->ifTrue(static function (array $paths): bool {
                            if (1 === \count($paths)) {
                                return false;
                            }

                            $filenames = [];
                            foreach ($paths as $path) {
                                $filename = basename($path, '.scss');
                                $filenames[$filename] = $filename;
                            }

                            return \count($filenames) !== \count($paths);
                        })
                        ->thenInvalid('The "root_sass" paths need to end with unique filenames.')
                        ->end()
                    ->defaultValue(['%kernel.project_dir%/assets/styles/app.scss'])
                ->end()

#[...]

我用一个愚蠢的名称替换了

->defaultValue(['%kernel.project_dir%/assets/styles/app.scss'])
中的默认值,我不会打扰你。我尝试启动一个构建来测试它是否会因该愚蠢的名称而吐出错误......构建成功了!这次 sass 编译了我之前填写的
.yaml
配置文件。

> php bin/console sass:build --watch

 ! [NOTE] Downloading Sass binary from https://github.com/sass/dart-sass/releases/download/1.69.7/dart-sass-1.69.7-windows-x64.zip

 4002605/4002605 [============================] 100%
 ! [NOTE] Executing Sass (pass -v to see more details).

[2024-04-11 14:30:51] Compiled assets\styles\insets.scss to var\sass\insets.output.css.
Sass is watching for changes. Press Ctrl-C to stop.

老实说,我有点困惑,我仍然不知道为什么它不早点考虑我的配置文件。代码摘录证明该函数正在寻找,并且我正确命名了我的文件。

© www.soinside.com 2019 - 2024. All rights reserved.