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 postcss 的最新版本使用正确的过滤器。您的代码适用于 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-extensions 设置配置变量的方法。为扩展设置配置的最常见(也是首选)方法是使用 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代码风格和格式约定除外!
我已按照 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 构造的。
也许有人可以帮助我理解我做错了什么?
自动前缀器:
你的代码没有问题1。您只是没有为 Autoprefixer. If you look at the history of the releases in that link, since version 6.0.0, it started using postcss 的最新版本使用正确的过滤器。您的代码适用于 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-extensions 设置配置变量的方法。为扩展设置配置的最常见(也是首选)方法是使用 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代码风格和格式约定除外!