如何在调试模式下让Flask-Assets每次请求时重新生成SCSS?

3 投票
2 回答
1391 浏览
提问于 2025-04-18 17:56

这是我如何为 flask-assets 设置 scss 的方法:

def configure_extensions(app):
  # Web Assets
  from app.extensions import assets
  scss = Bundle(
    'scss/all.scss',
    filters='scss',
    output='scss_all.css'
  )
  assets.register('scss_all', scss)
  assets.init_app(app)

在我的配置中,我设置了 ASSETS_DEBUG = True

这样做是有效的,它会生成文件 app/static/scss_all.scss 和文件夹 app/static/.webassets.cache。样式在网站上也能正常显示。

不过,问题是如果我想重新生成 scss 样式表,就必须手动删除上面提到的文件。这在调试 scss 时非常麻烦。

有没有办法在 app.debug 设置为 True 时,自动通过重载器重新生成这些文件呢?


(顺便说一下,我正在使用 flask 的开发版本)

2 个回答

0

Joe的回答应该被采纳。我也用类似的方法实现了:

scss = Bundle('css/main.scss',
             filters='libsass',
             depends='css/*',
             output='gen/home%(version)s.css')

app = Flask(__name__)
assets = Environment(app)
assets.register('scss_all', scss)

所有的scss文件都放在css文件夹里。main.scss会把其他文件导入进来。现在,只要这个文件夹里的任何文件有改动,就会自动刷新。

6

这应该是可以正常工作的。不过,如果你在主文件中使用了@imports来引入其他的scss文件,那么你需要添加一个依赖选项。像这样;

mycss = Bundle(
    'app.scss',
    filters='pyscss,cssprefixer', depends=('/path/to/scss/files/**/*.scss'), output='generated/css/app.css')
assets.register('mycss)

撰写回答