在webassets包中使用“depends”

时间:2013-08-13 14:41:20

标签: flask glob webassets

我正在使用webassets在我的Flask应用中使用Flask-Assets,而我在创建bundles时遇到depends选项时遇到问题。

在我的情况下,我正在捆绑来自以下目录结构的LESS文件:

/static
 \_ /css
     \_ /bootstrap
     |   \_ bootstrap.less // This file @imports variables.less and custom.less
     |   \_ variables.less
     \_ custom.less

我的包看起来像这样:

css = Bundle(
    "css/bootstrap/bootstrap.less",
    filters="less, cssmin",
    output="dist/base.css",
    depends="**/*.less"
)

使用这些设置,只要对bootstrap.lesscustom.less但不是variables.less进行了更改,就会重建LESS文件。

根据我的理解,用于depends选项的表达式是glob指令,使用上面的指令应该只是递归遍历所有目录并获取任何LESS文件。但是,它似乎永远不会接受对variables.less所做的任何更改。

在我尝试解决此问题时,我尝试了depends的以下选项:

  • "*.less" - 不接受任何东西(因为它在项目目录的根目录中搜索,我相信,无论如何都没有LESS文件)
  • "**/*.less, myproject/static/css/bootstrap/variables.less" - 根本不接受任何文件中的任何更改。
  • "**/*.less, myproject/static/css/bootstrap/variables.less" - 与上面的相同。
  • "myproject/static/css/bootstrap/variables.less" - 奇怪的是,这取决于对variables.less和任何其他LESS文件(例如custom.less)所做的更改。

从本质上讲,最后一项是我的问题的“解决方案”,但我不知道为什么它的工作方式如此,所以它并不适合我。任何人都可以在这里向正确的方向提供解释或推动吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

这里的问题是**模块不支持递归glob glob(尚未看到issue 13968)。

以下是我在我的一个项目中设置的方法(不确定这是否符合您的需求):

less/
├── bootstrap/
│   ├── bootstrap.less
│   ├── variables.less
│   └── ...
└── style.less        # @import "bootstrap/bootstrap.less";

捆绑配置:

css = Bundle(
    "less/style.less",
    filters="less, cssmin",
    output="css/all.css",
    depends="less/bootstrap/*.less"
)

答案 1 :(得分:3)

我通过安装glob2模块解决了这个问题。我的depends='**/*.scss'然后按照我的预期开始工作,观察嵌套目录和顶层的变化。