0

レール:SASS負荷動的変数私は資産を構築するために宝石<a href="https://github.com/rails/webpacker" rel="nofollow noreferrer">rails/webpack</a>を使用していますが、私はブランド別係るダイナミックSCSSを構築する必要がある、のような

//admin.scss 
@import 'variables-<%= 'brand-name' %>'; 

body { 
    background: $primary-color; 
} 

私はローダーを追加しようとしています:

{ 
    test: /\.scss(\.erb)?/, 
    loader: 'sass-loader', 
    options: { importExtensions: ['.scss', '.scss.erb', '.css'] } 
} 

しかし、それは機能しませんでした。 そのようなことをする方法はありますか?

+2

WebpackはERBインタープリタを介してアセットを実行しません。ただし、Sprocketsはそうします。また、アセットは通常、デプロイ時にコンパイルされるため、どの変数もリクエストに基づいているわけではないことに注意する必要があります。より良い解決策は、使用するスタイルシートで異なるルールを設定するためにHTMLのクラスを使用することです。 – max

答えて

0

別々のコントローラのアクションでこれを行います

layout.html.erb

<%= stylesheet_link_tag stylesheet_path() %>

スタイルシートを表示するコントローラのアクションを

# Render the template to a string 
css = Sass::Engine.new(
    render_to_string("path/to/erb_template", :layout => false), 
    syntax:  :scss, 
    cache:  false, 
    read_cache: false, 
    style:  :standard, 
    sprockets: { 
    context:  self.view_context, 
    } 
).render 

# respond with the rendered string 
respond_to do |format| 
    format.css { render plain: css, :content_type => "text/css" } 
end 

あなたは、その後にERB変数を含めることができますテンプレート。これは、すべての単一の負荷でSassエンジンに渡されるため、実稼働環境でキャッシュする必要があることに注意してください。

あなたのお尻をきれいに別々のファイルにまとめるには、変数を1つのファイルに入れてERBとしてレンダリングし、残りはテキストファイルとして読み込みます。

+0

うわー、どうしたらいいでしょう:)おそらく私はそれを試してみたいと思いますが、今はそれぞれの会社に1つの.scssファイルを作成し、レイアウトでインポートします。 '' '<%= stylesheet_pack_tag 'login-' + @company .sub_domain%> '' ' ベストソリューションではありませんが、部分的に私の問題を解決しました。 –

関連する問題

 関連する問題