加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails – 如何在手动sass编译中传递Sprockets

发布时间:2020-12-17 03:41:59 所属栏目:百科 来源:网络整理
导读:我正在使用以下代码片段手动编译sass清单并附加了一些变量覆盖. template = File.read("#{Rails.root}/app/assets/schemes/#{scheme}/css/styles.css.scss")scheme_variables.each do |key,value| template "$#{key}:#{value};n"endengine = Sass::Engine.n
我正在使用以下代码片段手动编译sass清单并附加了一些变量覆盖.

template = File.read("#{Rails.root}/app/assets/schemes/#{scheme}/css/styles.css.scss")

scheme_variables.each do |key,value|
  template << "$#{key}:#{value};n"
end

engine = Sass::Engine.new(template,{ 
  :syntax => :scss,:cache => false,:read_cache => false,:style => :compressed,:filesystem_importer => Sass::Rails::SassImporter,:load_paths => MyApp::Application.assets.paths,:sprockets => {
    :context => ?,:environment => MyApp::Application.assets
  }
})
output = engine.render

Sass :: Engine构造函数需要选项哈希中的sprockets上下文和环境.我对上下文有什么看法?我尝试的第一件事就是……

:context => MyApp::Application.assets.context_class,

…但是当它碰到我的一个sass资产助手时,它给了我以下错误“未定义的方法`font_path’for#”.

我尝试的第二件事是……

:context => ActionController::Base.helpers,

…修复了资产助手问题,但是当它试图通过我的glob导入(例如@import“mixins / *”)时,会抛出以下错误“未定义的方法`depend_on’为#”.

我正在使用Rails 4.2和sass-rails 5.0.3.

对此有任何建议将非常感激.谢谢!

解决方法

使用Sass :: Rails :: ScssTemplate,您可以使用以下代码段呈现您的sass代码:

template = '...' # Your sass code

logical_path = pathname = ''
environment = Rails.application.assets
context = environment.context_class.new(environment,logical_path,pathname)

template = Sass::Rails::ScssTemplate.new(pathname) { template }
output = template.render(context,{})

如果要从文件呈现,则只需将其路径添加到pathname,将其资源路径添加到logical_path.

对我来说,它适用于Rails 4.2.5.1和sass-rails 5.0.4.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读