使用 Symfony 的 LESS 中的资产路径

Assets paths in LESS using Symfony

使用 Symfony2 和 LESS,我很难找到导入资产的好方法。例如,如果我想在位于 @bundle/Resources/public/css/file.less 的 LESS 文件中导入资产,并且资产位于:/web/assets/vendor/foo/bar.less(将 / 视为项目根目录)。

使用 ../../../../../../web/assets/vendor/foo/bar 可以,但不是很漂亮。 /web/assets/vendor/foo/bar 也不起作用,因为 LESS 不知道项目所在的位置。

有没有比上面更漂亮的解决方案?

不是直接的解决方案,但可能是一些启发:

我正在使用 assetic 过滤器和 sass,下面的配置运行良好

assetic:
    filters:
        scss:
           load_paths:
               - '%kernel.root_dir%/some/scss_path'
               - '%kernel.root_dir%/some-other/scss_path'

如果您手动编译 less,还有 --include-path 选项:

$ lessc styles.less --inlude-path="/web/assets/vendor/foo"

你在使用 less.js 吗?在生产中推荐使用预编译css。我认为 assetic 是正确的解决方案,特别是如果您使用的是 symfony。当您处于开发模式时,它可以在运行时编译您的 less,然后可以简单地使用 assetic:dump 为生产模式编译您的所有 less。

我通过切换到 Less.php 解决了这个问题,然后在我的 config.yml 中指定了一个 path。完整示例:

#config.yml
assetic:
    filters:
        lessphp:
            apply_to: "\.less$"
            paths:
                - "%kernel.root_dir%/../web"

这使得使用例如:

成为可能
@import 'assets/vendor/foo/bar';