Django-compressor: Sass, ์••์ถ•๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋กœ ์ธํ•ด ๊ตฌ๋ฌธ ๋ถ„์„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 02์›” 15์ผ  ยท  11์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: django-compressor/django-compressor

์•ˆ๋…•ํ•˜์„ธ์š”, Bootstrap 4 alpha 6์„ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. BS4๊ฐ€ ํฌํ•จ ๋œ ์ดํ›„์˜ ๋ชจ๋“  CSS๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฌด์‹œ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋” ๊นŠ์ด ํŒŒ๊ณ  ์ƒ์„ฑ ๋œ CSS์˜ ๊ตฌ๋ฌธ ๋ถ„์„ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Django 1.8.17, Compressor 2.1.1, Sass 3.4.22๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ฐพ์€ ์ฒซ ๋ฒˆ์งธ ๊ตฌ๋ฌธ ๋ถ„์„ ์˜ค๋ฅ˜๋ฅผ ์—ฌ๊ธฐ์— ๋ฌธ์„œํ™”ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๋Š” stroke='rgba(0, 0, 0, 0.5")', ์˜ ํฐ ๋”ฐ์˜ดํ‘œ " stroke='rgba(0, 0, 0, 0.5")', ์ด์ง€๋งŒ stroke='rgba(0, 0, 0, 0.5)' ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ฌธ์„œ์—์„œ ๊ตฌ๋ฌธ ๋ถ„์„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์œ ํšจํ•˜์ง€ ์•Š์€ ๋ผ์ธ (dj ์••์ถ•๊ธฐ๋ฅผ ํ†ตํ•ด)

.navbar-light .navbar-toggler-icon {
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5")' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); }

์œ ํšจํ•œ ๋ผ์ธ (sass direct๋ฅผ ํ†ตํ•ด)

.navbar-light .navbar-toggler-icon {
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); }

์‚ฌ์ „ ์ปดํŒŒ์ผ ๋œ ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

_background-image_์˜ ์†Œ์Šค

$navbar-light-toggler-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"), "#", "%23") !default;

$navbar-light-color:                rgba($black,.5) !default;

$black:  #000 !default;

dj ์••์ถ•๊ธฐ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

{% compress css %}
<link rel="stylesheet" type="text/x-scss" media="screen" charset="utf-8"
    href="/static/bootstrap/scss/bootstrap.scss" />
{% endcompress %}
COMPRESS_PRECOMPILERS = (
    ('text/coffeescript', 'coffee --compile --stdio'),
    ('text/x-sass', 'sass {{infile}} {{outfile}} --load-path {}'.format(LIB_PATH)),
    ('text/x-scss', 'sass --scss {{infile}} {{outfile}} --load-path {}'.format(LIB_PATH)),
)

๋ชจ๋“  11 ๋Œ“๊ธ€

๊ฝค ๋‚˜๋น  ๋ณด์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋ช‡ ์ฃผ ๋™์•ˆ์€ ์‹œ๊ฐ„์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ€๋ณผ ๊ฒŒ์š”. ๋‚˜๋Š” ๋‹น์‹ ์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ต์ˆ™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ ํ•ด์•ผํ• ์ง€ / ์–ด๋–ค ์ง๊ฐ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋„ ๋งค์šฐ ๊ฐ€์น˜๊ฐ€์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ :

  • COMPRESS_ENABLED = False ํ•ฉ๋‹ˆ๊นŒ?
  • Sass ๋ฒ„์ „์ด ๋™์ผํ•œ ์ง€ ๋‹ค์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? (์ด๊ฒƒ์— ๋Œ€ํ•ด ๋ฏธ์•ˆํ•˜์ง€๋งŒ ์ด๋ก ์ ์œผ๋กœ ๋ชจ๋“  ์ปดํ”„๋ ˆ์„œ๋Š” ์ฒ˜๋ฆฌ ํ•  Sass์— ์ž…๋ ฅ์„ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ๋ญ”๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ์žˆ์ง€๋งŒ ์ด๊ฒƒ์„ ๋ฐฐ์ œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.)

@carltongibson :

  • COMPRESS_ENABLED = False ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ด๋ฉฐ True ์„ค์ •์‹œ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๊ด€์ฐฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ sass ๋ฒ„์ „์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ํ™˜๊ฒฝ์—์„œ ์„œ๋ฒ„ ์‹คํ–‰
$ sass -v 
Sass 3.4.22 (Selective Steve)

์ปดํ”„๋ ˆ์„œ ๋ธ”๋ก์— sass ๋ฒ„์ „ ๋˜๋Š” ๋ฏธ๋ฆฌ ๋นŒ๋“œ ๋œ bootstrap.css ํŒŒ์ผ์„ ํฌํ•จํ•˜๊ณ  ๊ทธ ๋’ค์— ์œ ํšจํ•œ / ํŒŒ์‹ฑ ๊ฐ€๋Šฅํ•œ CSS์— ๋Œ€ํ•œ ์ฒดํฌ ๋ผ์ดํŠธ๋กœ body b ackground : green ์„ ํฌํ•จํ•˜๋Š” ํŒŒ์ผ์„ ํฌํ•จํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ „ ๋นŒ๋“œ ๋œ .css ๋ฒ„์ „์— ๋Œ€ํ•ด์„œ๋Š” '๋…น์ƒ‰'์ด ํ‘œ์‹œ๋˜์ง€๋งŒ ์••์ถ•๊ธฐ๊ฐ€ ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ์„ ๋นŒ๋“œํ•˜๋Š” .sass์—๋Š” ํ•ด๋‹น๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@wjdp ํ™•์ธ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ .

์ด ๊ฒฝ์šฐ Compressor.precompile ์ค‘๋‹จ ์ ์„ ๋„ฃ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋จผ์ € content ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „๋‹ฌ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋Ÿฌ๋ฉด hunks() ์—์„œ ํ”„๋ฆฌ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ๋ฐ˜ํ™˜ ๋œ value ๋งž์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ง€๊ธˆ ์ด๊ฒƒ์„ ์กฐ์‚ฌํ•˜๊ณ ์žˆ๋‹ค. ๋ฌธ์ œ๋Š” # 764์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. CssAbsoluteFilter๋Š” r'url\(([^\)]+)\)' ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ URL์„ ์ผ์น˜ ์‹œํ‚ค๋ฏ€๋กœ ์ฒซ ๋ฒˆ์งธ ๋‹ซ๋Š” ๊ด„ํ˜ธ์—์„œ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค. ์ •๊ทœ์‹์€ ์ž„์˜์˜ ์ˆ˜์˜ ์ค‘์ฒฉ ๋œ ๊ด„ํ˜ธ๋ฅผ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์—†๊ธฐ ๋•Œ๋ฌธ์— ์„ธ ๊ฐ€์ง€ ์˜ต์…˜์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  1. ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ์ถฉ๋ถ„ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํžˆ ํ•œ ์ˆ˜์ค€์˜ ์ค‘์ฒฉ ๋œ ๊ด„ํ˜ธ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ณด๋‹ค ์ง€๋Šฅ์ ์ธ ๋งค์นญ ๋กœ์ง์œผ๋กœ ์ ์ ˆํ•˜๊ฒŒ ์ˆ˜ํ–‰
  3. ์ผ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CSS๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ์ด๊ฒƒ์— ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ณ  ์˜ต์…˜ 1์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋” ๊ฐ•๋ ฅํ•œ ์†”๋ฃจ์…˜์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ๊ฒ€ํ† ํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

# 828์—์„œ ์ œ์•ˆ ๋œ ์ˆ˜์ • ์‚ฌํ•ญ. ์‹ค์ œ๋กœ ์ค‘์ฒฉ ๋œ ๊ด„ํ˜ธ๋ฅผ ์ „ํ˜€ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ( url("data:...stroke='rgba(0, 0, 0, 0.5) ์ผ์น˜ํ•˜์ง€ ์•Š์Œ) ๋‹ซ๋Š” ๋”ฐ์˜ดํ‘œ ๋งŒ ์˜ˆ์ƒํ•˜๊ณ  ์•ˆ์ „์„ ์œ„ํ•ด data-uris๋Š” ๋ชจ๋‘ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

@wjdp # 828์„ ์‹œ๋„ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ ์‹คํ–‰์€ ์ข‹์€ ํ™•์ธ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•  ๊ฒƒ์ด๋‹ค

@carltongibson PR์ด์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ๋น ๋ฅธ ์ž‘์—…์— ๋Œ€ํ•ด @karyon ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! :๋ฏธ์†Œ:

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘๐Ÿฝ ํ›„์† ์กฐ์น˜์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰