Autoprefixer 过滤器在 Flask_Assets 中不起作用

Autoprefixer Filter Not Working in Flask_Assets

我已按照 Flask_Assets documentation 中的说明尝试让自动前缀过滤器与 flask_assets 一起使用,但它似乎没有应用过滤器。这是我的代码:

# construct flask app object
from flask import Flask, render_template_string
flask_args = { 'import_name': __name__ }
flask_app = Flask(**flask_args)

from flask_assets import Environment, Bundle
assets = Environment(flask_app)
assets.config['AUTOPREFIXER_BIN'] = 'postcss'
assets.config['AUTOPREFIXER_BROWSERS'] = [ '> 1%' ]
css_min = Bundle('../styles/mycss.css', filters='autoprefixer', output='styles/test.css')
assets.register('css_assets', css_min)

@flask_app.route('/')
def landing_page():
    html = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\
            <head>{% assets "css_assets" %}\
            <link rel="stylesheet" href="{{ ASSET_URL }}" type="text/css">\
            {% endassets %}\
            <title>Hello</title>\
            </head>\
            <h1>Hello World</h1>\
            <p>Just a test of flask</p>'
    return render_template_string(html), 200

if __name__ == '__main__':
    flask_app.run(host='0.0.0.0', port=5000)

我已经能够成功应用 cssmin、pyscss、uglifyjs 和 jsmin 过滤器。我还可以在命令行上使用 运行 autoprefixer 来成功编译转换后的输出:

postcss --use autoprefixer --autoprefixer.browsers "> 1%" -o test.css mycss.css

然而,当尝试通过 flask_assets 注册 运行 autoprefixer 时,该过程既不会引发错误,也不会花费所需的时间进行编译。它确实生成了输出文件,但是当我检查生成的文件时,已经应用了 none 个前缀。

更新: 每当尝试为任何过滤器配置选项时,似乎都会出现此问题。我无法让 uglifyjs 接受 'UGLIFYJS_EXTRA_ARGS' 或让 pyscss 过滤器采用 'PYSCSS_STYLE' 的新样式。我尝试使用 os.environ['AUTOPREFIXER_BIN'] 将这些配置设置为环境变量,并尝试通过 flask.config['AUTOPREFIXER_BIN'] 传递它们。但是当过滤器为 运行 时,已应用 none 的配置设置。我也不清楚代码本身的配置选项是由 Bundle 还是 Environment 构造的。

声称已经找到了使配置设置生效的方法,但是 post 并未显示 flask_assets 需要如何设置才能摄取的整个工作流程这些选项。

也许有人可以帮助我理解我做错了什么?

自动前缀器:

你的代码没有问题1。您只是没有为 Autoprefixer. If you look at the history of the releases in that link, since version 6.0.0, it started using 的最新版本使用正确的过滤器。您的代码适用于 6.0.0 之前的版本。

Webassets 通过提供 autoprefixer6 过滤器为版本 after 6.0.0(含)提供支持。

因此,您所要做的就是在初始化包时更改过滤器,如下所示:

css_min = Bundle('../styles/mycss.css', filters='autoprefixer6', output='styles/test.css')

其他过滤器的配置:

不要使用 os.environ,这不是为 Flask 和 设置配置变量的方法。为扩展设置配置的最常见(也是首选)方法是使用 flask Config 本身,在大型项目中,这是使用单独的配置文件完成的。扩展将从烧瓶的配置中获取其配置选项。

根据您使用的扩展程序,您也可以像您所做的那样单独设置配置,但据我目前所见,很少使用。

请查看 Flask 的 Configuration related documentation 以获取有关如何“正确”设置应用程序配置的一些很好的示例。


from flask import Flask, render_template_string
from flask_assets import Environment, Bundle

# construct flask app object
flask_args = {'import_name': __name__}
flask_app = Flask(**flask_args)

assets = Environment(flask_app)
# specify the bin path (optional), required only if not globally installed 
assets.config['AUTOPREFIXER_BIN'] = 'path/to/postcss'
assets.config['AUTOPREFIXER_BROWSERS'] = ['> 1%', ]
# use the autoprefixer6 updated filter
css_min = Bundle('../styles/mycss.css', filters='autoprefixer6',
                 output='styles/test.css')
assets.register('css_assets', css_min)


@flask_app.route('/')
def landing_page():
    html = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\
            <head>{% assets "css_assets" %}\
            <link rel="stylesheet" href="{{ ASSET_URL }}" type="text/css">\
            {% endassets %}\
            <title>Hello</title>\
            </head>\
            <h1>Hello World</h1>\
            <p>Just a test of flask</p>'
    return render_template_string(html), 200


if __name__ == '__main__':
    flask_app.run(host='0.0.0.0', port=5000)

如果源 css/js 没有改变,请记得清除之前生成的文件,即删除输出文件和 .webassets-cache 文件夹。

1代码风格和格式约定除外!