首页 > 解决方案 > webassets 为 python 烧瓶应用程序重建 scss 后如何删除旧的 css 文件?

问题描述

我有一个使用 flask_assets 库的 Python 3.9 烧瓶应用程序。

我的烧瓶初始化.py 文件如下所示:

import logging
import os
from flask import Flask, request, current_app
from config import Config
from flask_assets import Environment
from app.utils.assets import bundles

def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)
    
    assets = Environment(app)
    assets.debug = True
    assets.versions = 'timestamp'
    # assets.cache = False

    from app.main import bp as main_bp
    app.register_blueprint(main_bp)
    assets.register(bundles)

    if not app.debug and not app.testing:
        app.logger.setLevel(logging.INFO)
        app.logger.info('Application starting.')

    return app

由于 flask_assets 是建立在 webassets 之上的,所以我导入了 Environment 和我创建的一个 css Bundle,它将我的 scss 代码编译为 css。

这是我的 Bundle 的样子:

from flask_assets import Bundle

bundles = {
    'css': Bundle (
        'scss/_main.scss',
        'scss/_base.scss',
        'scss/_typography.scss',
        'scss/_page_home.scss',
        'scss/_page_technote.scss',
        filters='pyscss',
        depends=('**/*.scss'),
        output='css/style.%(version)s.scss.css'
    )
}

我遇到的问题:

每次我对我的 scss 文件进行更改时,css 都会使用新版本成功重建以进行缓存破坏。但是,旧的 css 文件仍然存在。

每次重建发生时删除它们的最佳自动方法是什么?有什么理由保留旧文件吗?

另外 - 附带问题 - Bundle 对象是否可以自动考虑目录中特定类型的所有文件?而不是我单独列出每个文件?

这是我的文件的样子:

在此处输入图像描述

谢谢!

标签: pythoncssflaskwebassets

解决方案


您可以使用rmtree. 尽管我相信存在更好的方法,但它确实做到了。

from os.path import join
from shutil import rmtree

app = Flask(__name__)

rmtree(join(app.static_folder, 'css'), ignore_errors=True)

您可以通过按日期检查文件元数据或类似方法来改进这一点,而不是删除未更改的元数据。


推荐阅读