Less.js: ์†Œ์Šค ๋งต, ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๊ณ  Less ํŒŒ์ผ์„ ๋ณ‘๋ ฌ๋กœ ์ปดํŒŒ์ผ ํ•  ๋•Œ ์„ ํƒ๊ธฐ๊ฐ€ ๋ˆ„๋ฝ ๋จ

์— ๋งŒ๋“  2020๋…„ 12์›” 14์ผ  ยท  29์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: less/less.js

ํ•˜๋‹จ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

    @root-name: business-bundle
    /* other file */
    .@{root-name} .wrapper{
        /* css... */
    }

์›นํŒฉ์ด 3.12.2 ๋ฏธ๋งŒ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 3.13.0์„ ์‚ฌ์šฉํ•˜๋ฉด webpack ๋นŒ๋“œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
image

bug medium priority research needed

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@PengJiyuan @kirazxyun @Justineo ๋“ฑ [email protected] ํ…Œ์ŠคํŠธ ํ•ด๋ณด์„ธ์š”

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

@TopGrd ๊ทธ๊ฒƒ์€ ๊ณ„์† ์ง„ํ–‰ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Less๊ฐ€ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ํŒจํ‚ค์ง€์˜ ์˜ค๋ฅ˜ ์ธ ๊ฒฝ์šฐ ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ํ…Œ์ŠคํŠธ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋˜ํ•œ Less ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด lessc ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

v3.13.0-3.12.2์—์„œ๋„ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

image

์ด๊ฒƒ์€ ๊ฑฐ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ์ด๋ฏ€๋กœ ์ ์€ ํŒŒ์ผ์—์„œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•œ ๊ณณ์„ ์ฐพ๊ธฐ๊ฐ€ ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ

๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ๋ฌด์—‡์„ ๊ธฐ๋Œ€ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์˜ˆ๊ฐ€์—†๊ณ  Less ์ž์ฒด์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ํ•ด๊ฒฐ์ฑ…์— ํฌ๋ง์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ํ•ด๋‹น ์˜ค๋ฅ˜์— ์ค‘๋‹จ ์ ์„ ์„ค์ •ํ•˜๊ณ  ์˜ˆ์ƒ ํ•œ ์„ ํƒ๊ธฐ๊ฐ€ ๋ฌด์—‡์ด๊ณ  ์™œ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ—‰

๋‹จ์„œ,์ด Less ์ฝ”๋“œ๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    @root-name: business-bundle
    /* other file */
    .@{root-name} .wrapper{
        /* css... */
    }

@root-name: business-bundle ์— ์„ธ๋ฏธ์ฝœ๋ก ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ค๋ฅ˜๋ฅผ ์˜ˆ์ƒํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๊ณ  Less์˜ ์ถœ๋ ฅ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ์ด "๋ˆ„๋ฝ ๋œ ์„ ํƒ๊ธฐ"์˜ค๋ฅ˜๋กœ ์‹คํŒจํ•˜๋Š” Less ์œ„์— ์ผ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ณ„์ธตํ™”๋˜์–ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณผ ์ €์žฅ์†Œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ธก ์ผ๋ฟ์ž…๋‹ˆ๋‹ค.

3.13.0์—์„œ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. (์•„์ง๋„ ์ตœ์†Œํ•œ์˜ ์žฌ์ƒ์‚ฐ์„ ์ฐพ์œผ๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.)

๊ด€๋ จ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// button.less
<strong i="7">@import</strong> "./lib.less";

.@{prefix}-button {
  color: red;

  &:hover {
    color: blue;
  }
}
// lib.less
<strong i="10">@import</strong> "./vars"; // where <strong i="11">@prefix</strong> is defined

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

{
  color: red;
}

:hover {
  color: blue;
}

์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

@ matthew-dean ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๋งค์šฐ ๊ฑฐ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๋ฐ๋ชจ์—์„œ ์žฌํ˜„ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค

๋ฟก๋ฟก

๋‹จ์„œ,์ด Less ์ฝ”๋“œ๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  @root-name: business-bundle
    /* other file */
  .@{root-name} .wrapper{
      /* css... */
  }

@root-name: business-bundle ์— ์„ธ๋ฏธ์ฝœ๋ก ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ค๋ฅ˜๋ฅผ ์˜ˆ์ƒํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๊ณ  Less์˜ ์ถœ๋ ฅ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ์ด "๋ˆ„๋ฝ ๋œ ์„ ํƒ๊ธฐ"์˜ค๋ฅ˜๋กœ ์‹คํŒจํ•˜๋Š” Less ์œ„์— ์ผ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ณ„์ธตํ™”๋˜์–ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณผ ์ €์žฅ์†Œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ธก ์ผ๋ฟ์ž…๋‹ˆ๋‹ค.

@ root-name : ๋น„์ฆˆ๋‹ˆ์Šค ๋ฒˆ๋“ค; ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์„ธ๋ฏธ์ฝœ๋ก ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

3.13.0์—์„œ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. (์•„์ง๋„ ์ตœ์†Œํ•œ์˜ ์žฌ์ƒ์‚ฐ์„ ์ฐพ์œผ๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.)

๊ด€๋ จ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// button.less
<strong i="8">@import</strong> "./lib.less";

.@{prefix}-button {
  color: red;

  &:hover {
    color: blue;
  }
}
// lib.less
<strong i="11">@plugin</strong> "~some-less-plugin"; // where <strong i="12">@prefix</strong> is injected which preprocessing plugins

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

{
  color: red;
}

:hover {
  color: blue;
}

์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

style-resources-loader๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ ์ „์—ญ ๋ณ€์ˆ˜๋„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๊ฒƒ๊ณผ ๊ด€๋ จ์ด์žˆ๋Š” ๊ฒƒ์ผ๊นŒ ์š”?

{
  test: /\.less$/i,
  use: [
    {
      loader: MiniCssExtractPlugin.loader,
      options: {
        hmr: process.env.NODE_ENV === 'development',
        reloadAll: true,
      },
    },
    {
      loader: 'css-loader',
    },
    {
      loader: 'postcss-loader',
      options: {
        config: {
          path: path.resolve(__dirname, '../postcss.config.js'),
        },
      },
    },
    {
      loader: 'less-loader',
      options: {
        lessOptions: {
          javascriptEnabled: true,
          paths: [path.resolve(cwd, 'node_modules')],
        },
      },
    },
    {
      loader: 'style-resources-loader',
      options:{
            patterns: path.resolve(
              cwd,
              './node_modules/@somemodule/style/index.less',
            ),
            injector: 'prepend',
          },
    },
  ],
},

๋‚ด ์ฝ”๋“œ :
image

๋””๋ฒ„๊ฑฐ less.render ์ถœ๋ ฅ : ์„ ํƒ๊ธฐ ์—†์Œ
image

@{bundle-root-class} ๋ณ€์ˆ˜๋Š” settingBundle ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ค„์˜ ๋ณ€์ˆ˜๊ฐ€ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ๋‹จ์ˆœํ•œ ์žฌ์ƒ์‚ฐ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•ซ ๋ชจ๋“ˆ ๊ต์ฒด๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜๊ณ  ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์˜ ์ปดํŒŒ์ผ ๋œ ์ถœ๋ ฅ์ด ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ๋Š” ์„ ํƒ๊ธฐ ๋ณด๊ฐ„์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

<strong i="6">@import</strong> "./lib.less";

.@{prefix}-button {
  val: @prefix;
}

์ปดํŒŒ์ผ :

{
  val: foo;
}

(๋ณด๊ฐ„ ๋œ ๋ถ€๋ถ„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ „์ฒด ์„ ํƒ๊ธฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.)

ํ—‰ํ—‰

๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์˜ ์ปดํŒŒ์ผ ๋œ ์ถœ๋ ฅ์ด ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ํ™•์žฅ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? Less์—์„œ ์ปดํŒŒ์ผ ๋œ ์ถœ๋ ฅ์ด ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋Œ€์ฒด๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

ํ•ซ ๋ชจ๋“ˆ ๊ต์ฒด๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜๊ณ  ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์˜ ์ปดํŒŒ์ผ ๋œ ์ถœ๋ ฅ์ด ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

@Justineo ์ด๊ฒƒ์€ ์œ ์šฉํ•œ ๋‹จ์„œ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊ณผ ๊ด€๋ จ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/less/less.js/issues/3434

๊ฐ„๋‹จํžˆ ๋งํ•ด, ํŠธ๋ฆฌ ์บ์‹ฑ์€ Less์—์„œ ํ•œ๋™์•ˆ ์ œ๊ฑฐ๋˜์—ˆ์ง€๋งŒ ์ผ๋ถ€ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์„ฑ๋Šฅ์— ๋„ˆ๋ฌด ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๋‹ค์‹œ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. Less๊ฐ€ ์ผ๋ถ€ ์ž„ํฌํŠธ ํŠธ๋ฆฌ ์ƒํƒœ๋ฅผ ์žฌ์„ค์ •ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” less.parse๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” "๋ผ์ด๋ธŒ"ํ™˜๊ฒฝ์—์„œ๋งŒ ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ์Œ, ๊ทธ ์ด๋ก ์„ ์žฌ์ƒ์‚ฐ์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ

์•ˆํƒ€๊น๊ฒŒ๋„ ์—ฌ์ „ํžˆ์ด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋””๋ฒ„๊น… ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. โ˜น๏ธ ๋ˆ„๊ตฐ๊ฐ€ ์‰ฝ๊ฒŒ ์žฌํ˜„ ํ•  ์ˆ˜์žˆ๋Š” repo๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‹จ๊ณ„๋ณ„๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3.13.0์—์„œ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. (์•„์ง๋„ ์ตœ์†Œํ•œ์˜ ์žฌ์ƒ์‚ฐ์„ ์ฐพ์œผ๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.)
๊ด€๋ จ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// button.less
<strong i="9">@import</strong> "./lib.less";

.@{prefix}-button {
  color: red;

  &:hover {
    color: blue;
  }
}
// lib.less
<strong i="12">@plugin</strong> "~some-less-plugin"; // where <strong i="13">@prefix</strong> is injected which preprocessing plugins

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

{
  color: red;
}

:hover {
  color: blue;
}

์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

style-resources-loader๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ ์ „์—ญ ๋ณ€์ˆ˜๋„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๊ฒƒ๊ณผ ๊ด€๋ จ์ด์žˆ๋Š” ๊ฒƒ์ผ๊นŒ ์š”?

{
  test: /\.less$/i,
  use: [
    {
      loader: MiniCssExtractPlugin.loader,
      options: {
        hmr: process.env.NODE_ENV === 'development',
        reloadAll: true,
      },
    },
    {
      loader: 'css-loader',
    },
    {
      loader: 'postcss-loader',
      options: {
        config: {
          path: path.resolve(__dirname, '../postcss.config.js'),
        },
      },
    },
    {
      loader: 'less-loader',
      options: {
        lessOptions: {
          javascriptEnabled: true,
          paths: [path.resolve(cwd, 'node_modules')],
        },
      },
    },
    {
      loader: 'style-resources-loader',
      options:{
            patterns: path.resolve(
              cwd,
              './node_modules/@somemodule/style/index.less',
            ),
            injector: 'prepend',
          },
    },
  ],
},

+1

@plugin + sourcemap์ด ์  ์œผ๋ฉด์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@ matthew-dean ๐Ÿ™

@PengJiyuan ๋ณต์ œ ๊ฐ€๋Šฅํ•œ ์ €์žฅ์†Œ์—์„œ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

+1
image
์ด ์ฝ”๋“œ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŠธ๋ฆฌ ๋…ธ๋“œ์— ์ž˜๋ชป๋œ fileInfo๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ์˜ ๊ฒฝ์šฐ inputSource๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

+1
image
์ด ์ฝ”๋“œ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŠธ๋ฆฌ ๋…ธ๋“œ์— ์ž˜๋ชป๋œ fileInfo๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ์˜ ๊ฒฝ์šฐ inputSource๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ matthew-dean ์ž ๊น, ์šฐ๋ฆฌ๋Š” ๋ฏธ๋‹ˆ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ ์ค„์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์‹ ์†ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

+1
image
์ด ์ฝ”๋“œ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŠธ๋ฆฌ ๋…ธ๋“œ์— ์ž˜๋ชป๋œ fileInfo๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ์˜ ๊ฒฝ์šฐ inputSource๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ ์ค„์€ 3.10.0 ์ดํ›„๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

@PengJiyuan ๋ณต์ œ ๊ฐ€๋Šฅํ•œ ์ €์žฅ์†Œ์—์„œ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

https://github.com/kirazxyun/less-question

์ด ์ €์žฅ์†Œ๋Š” ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 'npm run build'๋กœ ์‹คํ–‰ ํ•œ ๋‹ค์Œ dist ํด๋”์—์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@PengJiyuan ๋ณต์ œ ๊ฐ€๋Šฅํ•œ ์ €์žฅ์†Œ์—์„œ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

https://github.com/kirazxyun/less-question

์ด ์ €์žฅ์†Œ๋Š” ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 'npm run build'๋กœ ์‹คํ–‰ ํ•œ ๋‹ค์Œ dist ํด๋”์—์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ ๋งคํŠœ ๋”˜

@ matthew-dean @plugin์„ ์‚ฌ์šฉ

@PengJiyuan ๋งž์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ๋งต ๋นŒ๋“œ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ์ฒญํฌ ์ถœ๋ ฅ์— ์‹คํŒจํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

                if (inputSource === undefined) {
                    this._css.push(chunk);
                    return;
                }

ํŒŒ์ผ ์ค‘ ํ•˜๋‚˜์— ์ž˜๋ชป๋œ ๊ฐ€์ ธ ์˜ค๊ธฐ ๋งคํ•‘์ด์žˆ๋Š” ์ด์œ ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ์žฅ๊ธฐ์ ์ธ ์ˆ˜์ •์œผ๋กœ ๋‹จ๊ธฐ ์ˆ˜์ •์ด๋ฉ๋‹ˆ๋‹ค. (๋ณ‘๋ ฌ๋กœ ์ปดํŒŒ์ผ ํ•  ๋•Œ ์•„๋งˆ๋„ ์žฌ์‚ฌ์šฉ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

๊ทธ๋ž˜์„œ ๊ณง ์ž„์‹œ ๋ฐ˜์ฐฝ๊ณ  ํ•ด๊ฒฐ์„ํ•˜๊ณ  ๊ทธ ์›์ธ์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@PengJiyuan @kirazxyun @Justineo ๋“ฑ [email protected] ํ…Œ์ŠคํŠธ ํ•ด๋ณด์„ธ์š”

[email protected]๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

@ matthew-dean ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ™

@ matthew-dean์€ [email protected]์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Œ์„ ํ™•์ธํ•˜๊ณ  ๊ณง ๊ณต์‹ ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

[email protected] ๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค

3.13.1 ๊ฒŒ์‹œ ๋จ

์ด ์ˆ˜์ • ์‚ฌํ•ญ์ด ํฌํ•จ ๋œ 4.0.0๋„ ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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