πŸŽ„ μ„±μž₯일지 3.2

μ±… ν–‰λ³΅ν•œ 이기주의자(웨인 닀이어)의 λ‚΄μš©μ— μžκ·Ήλ°›μ•„ μ‹œμž‘ν•˜λŠ” μ†Œλ°•ν•œ μ„±μž₯기둝

μ‚΄μ•„μžˆλŠ” 꽃과 죽은 꽃은 μ–΄λ–»κ²Œ κ΅¬λ³„ν•˜λŠ”κ°€?
μ„±μž₯ν•˜κ³  μžˆλŠ” 것이 μ‚΄μ•„ μžˆλŠ” 것이닀.
생λͺ…μ˜ μœ μΌν•œ μ¦κ±°λŠ” μ„±μž₯이닀!

🌳 ν‚€μ›Œλ“œ (1.0)
μ΅œλŒ€ν•œ κ°„λ‹¨ν•˜κ²Œ 정리, 좔후에 λ³΄λ©΄μ„œ 슀슀둜 μ„€λͺ…
πŸ‰ κ²½ν—˜ μœ„μ£Όλ‘œ (2.0)
λ‹¨μˆœ 정보λ₯Ό μ „λ‹¬ν•˜κΈ°λ³΄λ‹€ 무엇을 λ°°μ› κ³  μ–΄λ–»κ²Œ ν•΄κ²°ν–ˆλŠ”μ§€ 짧고 κ°„λ‹¨ν•˜κ²Œ μž‘μ„±
❄️ 정해진 ν…œν”Œλ¦Ώμ— λ§žμΆ°μ„œ (3.0)
ν‚€μ›Œλ“œ, κ²½ν—˜ λͺ¨λ‘ μ’‹λ‹€. λ‹€λ§Œ 맀일 μž‘μ„±ν•˜κΈ°λ‘œ 마음 λ¨Ήμ€λ§ŒνΌ ν•΅μ‹¬λ§Œ κ°„κ²°ν•˜κ²Œ 정리할 수 있게 ν…œν”Œλ¦Ώμ„ μž‘μ„±
(3.1) 230102λΆ€ν„° μ‹œμž‘λ˜λŠ” ν•™μŠ΅μ— κ΄€ν•œ λ‚΄μš© μΆ”κ°€
(3.2) 230313λΆ€ν„° 쒀더 κ²½ν—˜, 감정 μœ„μ£Όμ˜ λ‚΄μš©λ„ λ‹΄κΈ°!

πŸ”‘ 였늘의 ν‚€μ›Œλ“œ

Vanilla Extract 그리고 TypeScript

  • Sass, LESS와 같이 λΉŒλ“œ νƒ€μž„μ— λͺ¨λ“  μŠ€νƒ€μΌλ“€μ΄ λ°œμƒν•˜λ©΄μ„œ λ™μ‹œμ— νƒ€μž…μŠ€ν¬λ¦½νŠΈμ™€ ν•¨κ»˜ ν•œλ‹€.
  • Framework Agnostic, 즉 μ–΄λ–€ ν”„λ ˆμž„μ›Œν¬μ—λ„ μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • νƒ€μž…μŠ€ν¬λ¦½νŠΈμ™€ μ•„μ£Ό 쒋은 쑰합이닀!
// ButtonComponent.ts
import { BaseComponent } from '../Base';
import { ButtonComponentStyle } from '../../style/components/ButtonComponent.css';

export class ButtonComponent extends BaseComponent<HTMLElement> {
  constructor(content: string, type?: string) {
    super(
        `<button class='${ButtonComponentStyle}' type='${type}'>${content}</button>`,
    );

    if (this.element.getAttribute('type') === 'flexible') {
      this.element.style.width = '4rem';
    }
  }
}

// ButtonComponent.css.ts
import { style } from '@vanilla-extract/css';

export const ButtonComponentStyle = style({
  display: 'flex',
  flexDirection: 'row',
  justifyContent: 'center',
  alignItems: 'center',
  padding: '0px 10px',

  position: 'absolute',
  width: '10rem',
  height: '2rem',
  // left: '20px',
  // top: '20px',

  background:
      'linear-gradient(174.6deg, #FFFFFF 4.31%, #FED15F 50.01%, #FEBE30 95.71%)',

  border: '1px solid var(--color-yellow-300)',
  borderRadius: '4px',
  fontStyle: 'normal',
  fontWeight: '600',
  fontSize: '11px',
  lineHeight: '13px',
  textAlign: 'center',
  letterSpacing: '-0.06em',

  ':hover': {
    cursor: 'pointer',
  },
});
// vite.config.js
// 개인적으둜 μ—¬κΈ°μ„œ μ—„μ²­ ν—€λ§ΈκΈ° λ•Œλ¬Έμ— κΈ°μ–΅ν•˜κΈ° μœ„ν•΄ μž‘μ„±ν•΄λ‘λŠ” μ˜ˆμ‹œ μ½”λ“œ
import { defineConfig } from 'vite';
import { vanillaExtractPlugin } from '@vanilla-extract/vite-plugin';
import { viteStaticCopy } from 'vite-plugin-static-copy';

export default defineConfig({
  base: './', // This sets the base path for all generated URLs to './'
  // Other configuration options...
  plugins: [
    vanillaExtractPlugin(),
    viteStaticCopy({
      targets: [
        {
          src: 'assets',
          dest: '',
        },
      ],
    }),
  ],
});
  • μœ„μ™€ 같이 Button μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΅¬ν˜„ν–ˆλ‹€.
  • css.ts에 μ›ν•˜λŠ” μŠ€νƒ€μΌμ„ vanilla extract둜 μ„ μ–Έν•΄μ£Όκ³  κ·Έ 값을 exportν•˜μ—¬ λžœλ”λ§ν•  html의 class에 ν• λ‹Ήν•œλ‹€.
  • 처음 μ΅νžˆλŠ” 방법과 css λͺ¨λ“ˆμ΄λΌμ„œ 계속 μ—λŸ¬, κ³΅μ‹λ¬Έμ„œμ˜ λ°˜λ³΅μ΄μ—ˆλ‹€.
  • νŠΉνžˆλ‚˜ 처음으둜 Vite λ²ˆλ“€λŸ¬μ™€ ν•¨κ»˜ μ‚¬μš©ν•˜λ‹€λ³΄λ‹ˆ 더 μ΅μˆ™μΉ˜ μ•Šμ•˜λ‹€.

μ°Έκ³ 

πŸ“ μš”μ•½ 및 ν•˜λ£¨ 간단 회고

tsλ₯Ό μ΄μš©ν•œ μ»΄ν¬λ„ŒνŠΈ ꡬ성과 vanilla extrach과의 λ¬΄ν•œ μ‚¬νˆ¬β€¦ λ­”κ°€ 진전이 λ§Žμ§€ μ•Šμ•„μ„œ νž˜λ“€μ—ˆμ§€λ§Œ, κ·Έλž˜λ„ μ–΄λ–»κ²Œ vite둜 λ²ˆλ“€λ§ μ‹œμ— ν˜„μž¬ html νŒŒμΌμ— src둜 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 이미지 νŒŒμΌμ„ λ²ˆλ“€λ§ λ•Œ λ„˜κΈΈ 수 μžˆλŠ”μ§€, ts둜 μ»΄ν¬λ„ŒνŠΈλ₯Ό μ–΄λ–»κ²Œ λ‚˜λˆ„κ³  μž‘μ„±ν•˜λ©΄ λ˜λŠ”μ§€ 등을 μƒˆλ‘­κ²Œ λ°°μ› λ‹€. μ†”μ§νžˆ 아직 μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„λ‘œ λ‚˜λˆ„κ³  μ„€κ³„ν•˜κ³  λ“€μ–΄κ°€λŠ” 것에 μ΅μˆ™μΉ˜κ°€ μ•Šλ‹€β€¦ κ·ΈλŸ¬λ‹ˆκΉŒ 더 ν•΄λ΄μ•Όν•œλ‹€!!!

였늘의 μž˜ν•œ 점

  • μƒˆλ‘œμš΄ 것(vanilla extract, ts component)을 μ‹œλ„ν•œ 것
  • μ—΄μ‹¬νžˆ κ³΅μ‹λ¬Έμ„œ λ³΄λ©΄μ„œ 끙끙거렀본 것
  • 그리고 κ²°κ΅­μ—” ν•΄κ²°ν•œ 것!!!

였늘의 μ•„μ‰¬μš΄ 점

  • λ­”κ°€ ν”„λ‘œμ νŠΈ 진도 μžμ²΄λŠ” 많이 λͺ» λ‚˜κ°„ 것 (γ… γ… )