gpt4 book ai didi

python - flask-assets - sass 不解析@import scss 指令中的相对路径

转载 作者:行者123 更新时间:2023-11-28 21:51:07 25 4
gpt4 key购买 nike

我有带构建环境的 Flask 应用程序

./bin/pip show flask | grep Version
Version: 0.10.1
./bin/pip show flask-assets | grep Version
Version: 0.10

src 文件夹中src/setup.py 有以下字符串

setup(
name = 'spf',
install_requires = [
'flask',
'flask-assets',
],
entry_points = {
'console_scripts': [
'spf_dev = spf.manage:dev', /* see manage.py dev function */
],
},
}

对于生成的 bin/spf_dev 我有src/spf/manage.py 包含以下代码

from flask.ext import assets
from . import env

def init (app):
manager = script.Manager(app)

manager.add_command(
'assets',
assets.ManageAssets(app.assets),
)
return manager

def dev ():
init(env.dev.app).run()

我使用的 flask 环境初始化src/spf/env/dev.py

from spf import init
app = init({
'ASSETS_DIR': 'src/spf/static/assets',
'ASSETS_URL': '/assets/',

'SASS_STYLE': 'compressed',

'UGLIFYJS_EXTRA_ARGS': (
'-c',
'--screw-ie8',
),

})

我实现了返回 wsgi 应用程序的初始化函数src/spf/init.py

import flask
from . import assets

def init (env_config=None):
app = flask.Flask(
'spf',
static_url_path='',
)

app.config.update(evn_config)
app.assets = assets.Assets(app)
return app

带有 Bundle 注册的 Assets 模块src/spf/assets.py

from flask.ext.assets import (
Environment,
Bundle,
)

class Assets (Environment):
def __init__ (self, app):
super(Assets, self).__init__(app)

if 'ASSETS_DIR' in app.config:
self.directory = app.config['ASSETS_DIR']

if 'ASSETS_URL' in app.config:
self.url = app.config['ASSETS_URL']

if 'SASS_STYLE' in app.config:
self.config['sass_style'] = app.config['SASS_STYLE']

if 'UGLIFYJS_EXTRA_ARGS' in app.config:
self.config['UGLIFYJS_EXTRA_ARGS'] = \
app.config['UGLIFYJS_EXTRA_ARGS']

self.register('theme.css', Bundle(
'scss/theme.scss',
filters='scss',
output='theme.css',
))

self.append_path('src/assets')

src/assets/scss/theme.scss

@import 'btn-o';

src/assets/scss/_btn-o.scss存在,不为空且有0777访问权限

但是当我运行的时候

buildout -c src/buildout.cfg
./bin/spf_dev assets -v build

我有错误

Building bundle: theme.css
Failed, error was: sass: subprocess had error: stderr=Error: File to import not found or unreadable: ./btn-o. on line 1 of standard input
Use --trace for backtrace. , stdout=, returncode=65

我已阅读https://github.com/miracle2k/webassets/blob/master/src/webassets/filter/sass.py#L36

但我不明白;-(在我使用 self.append_path('src/assets') 之后,为什么 sass 不使用 src/assets 解析来自标准输入的 @import 指令中的相对路径?

最佳答案

你需要为你的 sass 过滤器添加一个加载路径,以便它与 3.4.14 一起工作

sass = get_filter('scss')
sass.load_paths = [os.path.join(app.static_folder, 'scss')]

然后,当您注册您的包时:

self.register('theme.css', Bundle(
'scss/theme.scss',
filters=(sass,),
output='theme.css',
))

关于python - flask-assets - sass 不解析@import scss 指令中的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30821375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com