首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >烧瓶-assets不解析@import scss指令中的相对路径

烧瓶-assets不解析@import scss指令中的相对路径
EN

Stack Overflow用户
提问于 2015-06-13 17:12:18
回答 2查看 1.5K关注 0票数 2

我有内置环境的烧瓶应用程序。

代码语言:javascript
复制
./bin/pip show flask | grep Version
Version: 0.10.1
./bin/pip show flask-assets | grep Version
Version: 0.10

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

代码语言:javascript
复制
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 e.py和以下代码

代码语言:javascript
复制
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()

对于烧瓶环境初始化,我使用src/spf/env/dev.py

代码语言:javascript
复制
from spf import init
app = init({
    'ASSETS_DIR': 'src/spf/static/assets',
    'ASSETS_URL': '/assets/',

    'SASS_STYLE': 'compressed',

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

})

并在src/spf/init.py中实现了返回wsgi应用程序的init函数。

代码语言:javascript
复制
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

带有捆绑注册的资产模块src/spf/assets.py

代码语言:javascript
复制
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

代码语言:javascript
复制
@import 'btn-o';

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

但当我跑

代码语言:javascript
复制
buildout -c src/buildout.cfg
./bin/spf_dev assets -v build

我有错误

代码语言:javascript
复制
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来解析stdin中的@import指令中的相对路径?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-23 10:23:54

您需要在sass过滤器中添加一个加载路径,这样它才能使用3.4.14

代码语言:javascript
复制
sass = get_filter('scss')
sass.load_paths = [os.path.join(app.static_folder, 'scss')]

然后,当您注册包时:

代码语言:javascript
复制
self.register('theme.css', Bundle(
    'scss/theme.scss',
    filters=(sass,),
    output='theme.css',
))
票数 4
EN

Stack Overflow用户

发布于 2015-06-14 12:28:43

问题出在3.4.14里

解决办法是

代码语言:javascript
复制
sudo gem uninstall sass 
sudo gem install sass -v 3.4.13
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30821375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档