0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel Mix + SASS/SCSS + curly braces (波括弧/中括弧) でハマった

Posted at

何が悲しくて大晦日に仕事してるのか、原因不明(いやむしろミドルウェアのバグと思われる)の現象にどハマリして、このまま絶望とともに新年を迎えるのかと思いきや、思いつきが見事に的中して、年が変わる前に解決できたこの喜びを、ここで共有させてもらいたい。

問題:SCSSの文字列内の}が外に出て解釈されてしまう

問題のSCSSコードがこれ

background-image: url("... fill='${BencodeURIComponent($iconColor)}' ...");

Webpackでコンパイルしていたときはurl()に渡してる文字列は、意図したとおりそのままCSSに吐き出されていたが、Laravel Mixにした途端、どうしても}が解釈されてしまって下記のような壊れたCSSになってしまう。

background-image: url("... fill='${BencodeURIComponent($iconColor)

}
...");

クオートをシングルとダブルを切り替えてみたり、バックスラッシュ\でエスケープしてみたり・・・どれもダメだった。
が、渡している先がurl()と言うことは、もしや・・・

解決策:URLエンコードする

}%7Dに置き換える。はい、それだけ。
ついでに{%7Bに置き換えた。

これでやっと、正常なCSSが吐き出され、意図したとおりに動いてくれました。

あとがき

Laravel MixはWebpackのラッパーなので切り替える前と同じはずなのに、なぜか起きたこの現象。切り替え前と違うことと言えば、Laravel MixはSCSSをコンパイルするためにresolve-url-loaderを必要としたことくらい。

大晦日の貴重な数時間を返して欲しいが、もやもやしたまま新年を迎えなくて良かったとしよう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?