我已尝试按照Flask_Assets documentation中的说明使autoprefixer过滤器与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时,该进程既不会抛出错误,也不会花费所需的时间进行编译。它确实生成了输出文件,但是当我检查生成的文件时,没有应用任何前缀。
更新:每当尝试为任何过滤器配置选项时,似乎都会出现此问题。我无法让uglifyjs接受&#39; UGLIFYJS_EXTRA_ARGS&#39;或者让pyscss过滤器使用&#39; PYSCSS_STYLE&#39;无论是。我尝试使用os.environ [&#39; AUTOPREFIXER_BIN&#39;]将这些配置设置为环境变量,并尝试将它们传递给flask.config [&#39; AUTOPREFIXER_BIN&#39;]。但是,运行过滤器时未应用任何配置设置。我还不清楚代码本身的哪个位置配置选项是由Bundle或Environment构建的。
One SO post声称找到了一种让配置设置正常工作的方法,但该帖子没有显示为如何设置flask_assets来提取这些选项的整个工作流程。
也许有人可以帮我理解我做错了什么?
答案 0 :(得分:2)
您的代码 1 没有任何问题。您只是没有为最新版本的Autoprefixer使用正确的过滤器。如果您查看该链接中的版本的历史记录,从版本6.0.0开始,它就会开始使用postcss。您的代码适用于6.0.0以上的版本。
通过提供autoprefixer6
过滤器,Webassets已为版本after 6.0.0(包括)提供支持。
因此,您需要做的就是在初始化捆绑包时更改过滤器,如下所示:
css_min = Bundle('../styles/mycss.css', filters='autoprefixer6', output='styles/test.css')
不要使用os.environ
,这不是为Flask和flask-extensions设置配置变量的方法。设置扩展配置的最常见(也是首选)方法是使用烧瓶配置本身,在大型项目中,这是使用单独的配置文件完成的。扩展将从flask的配置中获取其配置选项。
根据您使用的扩展程序,您也可以像您一样单独设置配置,但是从目前为止我很少使用它。
请查看Flask的Configuration related documentation,了解有关如何为您的应用设置配置的一些很好的示例&#34;正确&#34;。
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 除了代码风格和&amp;格式约定!