Python Autoprefixer筛选器在Flask\u资产中不工作

Python Autoprefixer筛选器在Flask\u资产中不工作,python,flask,flask-assets,webassets,postcss,flask-extensions,Python,Flask,Flask Assets,Webassets,Postcss,Flask Extensions,我已尝试按照中的说明使autoprefixer筛选器与flask_资产一起工作,但它似乎没有应用筛选器。这是我的密码: # 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, B

我已尝试按照中的说明使autoprefixer筛选器与flask_资产一起工作,但它似乎没有应用筛选器。这是我的密码:

# 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)
但是,当尝试通过flaskèU资产注册运行autoprefixer时,该进程既不会抛出错误,也不会花费所需的编译时间。它确实生成输出文件,但当我检查结果文件时,没有应用任何前缀

更新:每当尝试为任何筛选器配置选项时,都会出现此问题。我无法让uglifyjs接受'uglifyjs_EXTRA_ARGS',也无法让pyscss过滤器采用使用'pyscss_style'的新样式。我尝试使用os.environ['AUTOPREFIXER_-BIN']将这些配置设置为环境变量,并尝试通过flask.config['AUTOPREFIXER_-BIN']传递它们。但在运行筛选器时未应用任何配置设置。我也不清楚代码中的配置选项是由Bundle还是由环境构建的

声称已经找到了一种让配置设置正常工作的方法,但这篇文章没有显示如何设置flask_资产以接受这些选项的整个工作流程

也许有人能帮我理解我做错了什么?

Autoprefixer: 你的代码没有问题1。您只是没有为最新版本的使用正确的筛选器。如果您查看该链接中发布的历史记录,从版本开始,它开始使用。您的代码将适用于早于6.0.0的版本

Webassets通过提供
autoprefixer6
过滤器提供了对版本(包括)的支持

因此,您只需在初始化捆绑包时更改筛选器,如下所示:

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

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

根据您使用的扩展,您也可以像以前一样单独设置配置,但从我到目前为止所看到的情况来看,这是很少使用的

请查看烧瓶中的一些关于如何“正确”设置应用程序配置的好例子


从烧瓶导入烧瓶,呈现\u模板\u字符串
从资产导入环境,捆绑
#构造flask应用程序对象
flask_args={'import_name':__name__}
烧瓶\应用=烧瓶(**烧瓶\参数)
资产=环境(flask_应用程序)
#指定bin路径(可选),仅当未全局安装时才需要
assets.config['AUTOPREFIXER_BIN']='path/to/postsss'
assets.config['AUTOPREFIXER_BROWSERS']=['>1%,]
#使用autoprefixer6更新的过滤器
css_min=Bundle('../styles/mycss.css',filters='autoprefixer6',
output='styles/test.css')
资产。注册('css_资产',css_最小值)
@烧瓶应用程序路线(“/”)
def登录页面():
html='1〕\
{%assets“css_assets”%}\
\
{%endassets%}\
你好\
\
你好,世界\
只是一个烧瓶测试

' 返回渲染模板字符串(html),200 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 烧瓶应用程序运行(主机=0.0.0.0',端口=5000)
如果源css/js没有更改,请记住清除先前生成的文件,即删除输出文件和
.webassets缓存
文件夹


1代码样式和格式约定除外

谢谢你的全面回复。autoprefixer和我的其他过滤器现在都在工作。看来,我尝试通过尝试不同的构造函数来解决这个问题失败的主要原因之一是我没有清理缓存。
css_min = Bundle('../styles/mycss.css', filters='autoprefixer6', output='styles/test.css')
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)