Less.js: рд╕реЛрд░реНрд╕рдореИрдкреНрд╕, рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдорд┐рд╕рд┐рдВрдЧ рдЪрдпрдирдХрд░реНрддрд╛ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рджрд┐рд╕ре░ 2020  ┬╖  29рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: less/less.js

рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдХреЛрдб рд╣реИ рдЬреИрд╕реЗ рдиреАрдЪреЗред

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

рдЬрдм рд╡реЗрдмрдкреИрдХ рдХрдо 3.12.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди 3.13.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╡реЗрдмрдкреИрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред
image

bug medium priority research needed

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@PengJiyuan @kirazxyun @Justineo рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ [email protected]

рд╕рднреА 29 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@TopGrd рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдпрд╣ рдПрдХ рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдХрдо рдмрдирд╛рдП рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдиреНрдпреВрдирддрдо рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдХреЗ рд╕рд╛рде рдЯреЗрд╕реНрдЯ рд░реЗрдкреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ? рд╕рд╛рде рд╣реА, рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдХрдо рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП lessc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?

V3.13.0 - 3.12.2 рдХреЗ рд╕рд╛рде рднреА рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рдкрд░ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рдирд╛ред

image

рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓рдЧрднрдЧ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрдо рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдпрд╣ рдХрд╣рд╛рдВ рддрдХ тАЛтАЛрд╣реИред

@endbay @TopGrd

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рд╣реИред рдХреЛрдИ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде, рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХрдо рдореЗрдВ рд╣реА рдирд╣реАрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛, рдПрдХ рд╕рдВрдХрд▓реНрдк рдореЗрдВ рдХреЛрдИ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рдХреЛ рдЙрд╕ рддреНрд░реБрдЯрд┐ рдкрд░ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдпрд╣ рдХреНрдпреЛрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

@TopGrd

рдПрдХ рд╕реБрд░рд╛рдЧ, рдпрд╣ рдХрдо рдХреЛрдб рдЕрдорд╛рдиреНрдп рд╣реИ:

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

@root-name: business-bundle рдПрдХ рдЕрд░реНрдз-рдЙрдкрдирд┐рд╡реЗрд╢ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдо рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХреБрдЫ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЛ, рдЬреЛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реА рд╣реЛ, рд╡рд╣ рдХрд┐рд╕реА рдХреЛ рдирд╣реАрдВ рдвреВрдВрдврддреА рд╣реИ, рдФрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИ рдФрд░ рд▓реЗрд╕ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ "рд▓рд╛рдкрддрд╛ рдЪрдпрдирдХрд░реНрддрд╛" рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдиреБрдорд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░реЗрдкреЛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ 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;
}

рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдХреЛрдИ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИред

@ рдореИрдереНрдпреВ-рдбреАрди рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬрд╣рд╛рдВ рддреНрд░реБрдЯрд┐ рд╣реБрдИред рдореИрдВ рдЗрд╕реЗ рдПрдХ рдбреЗрдореЛ рдореЗрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

@TopGrd

рдПрдХ рд╕реБрд░рд╛рдЧ, рдпрд╣ рдХрдо рдХреЛрдб рдЕрдорд╛рдиреНрдп рд╣реИ:

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

@root-name: business-bundle рдПрдХ рдЕрд░реНрдз-рдЙрдкрдирд┐рд╡реЗрд╢ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдо рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХреБрдЫ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЛ, рдЬреЛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реА рд╣реЛ, рд╡рд╣ рдХрд┐рд╕реА рдХреЛ рдирд╣реАрдВ рдвреВрдВрдврддреА рд╣реИ, рдФрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИ рдФрд░ рд▓реЗрд╕ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ "рд▓рд╛рдкрддрд╛ рдЪрдпрдирдХрд░реНрддрд╛" рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдиреБрдорд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░реЗрдкреЛ рдирд╣реАрдВ рд╣реИред

@ рд░реВрдЯ-рдирд╛рдо: рд╡реНрдпрд╛рдкрд╛рд░-рдмрдВрдбрд▓; рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рдореЗрд░рд╛ рдХреЛрдб рд╣реИред рдЗрд╕рдХрд╛ рдПрдХ рдЕрд░реНрдз-рдЙрдкрдирд┐рд╡реЗрд╢ рд╣реИред

рдореИрдВ 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;
}

рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдХреЛрдИ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИред

рдореИрдВ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рднреА рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реИрд▓реА-рд╕рдВрд╕рд╛рдзрдиреЛрдВ-рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рдХреБрдЫ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реЛ?

{
  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;
}

(рдиреЛрдЯ рдкреВрд░реЗ рдЪрдпрдирдХрд░реНрддрд╛ рдЧрд╛рдпрдм рд╣реИ, рди рдХреЗрд╡рд▓ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рднрд╛рдЧред)

@ рдЬрд╕реНрдЯреАрдиреЛ

рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдВрдХрд▓рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рд╕рд╣реА рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ

рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдкрд░ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХрдо рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рд╕рд╣реА рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

рдпрд╣ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдЬрдм рдЧрд░реНрдо рдореЙрдбреНрдпреВрд▓ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдВрдХрд▓рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рд╕рд╣реА рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

@ рдЬрд╕реНрдЯреАрдиреЛ рдпрд╣ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╕реБрд░рд╛рдЧ рд╣реИред рдпрд╣ рдЗрд╕ рдХреЗ рд╕рдВрдХрд▓реНрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ: https://github.com/less/less.js/issues/3434

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЯреНрд░реА рдХреИрд╢рд┐рдВрдЧ рдХреЛ рдПрдХ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд░рдЦ рджрд┐рдпрд╛ред рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрд╕ рдЗрд╕рд▓рд┐рдП рдЖрдпрд╛рдд рдХреЗ рдХреБрдЫ рд░рд╛рдЬреНрдп рдХреЛ рд░реАрд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред , рдЬреЛ рдХреЗрд╡рд▓ "рд▓рд╛рдЗрд╡" рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХрдоред рдореЛрдЯреЗ рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореНрдо, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдкреНрд░рдЬрдирди рдореЗрдВ рдЙрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

@Justineo @TopGrd @endbay

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣рд╕ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред Make рдЕрдЧрд░ рдХреЛрдИ рд░реЗрдкреЛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрджрдо рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВред

рдореИрдВ 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;
}

рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдХреЛрдИ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИред

рдореИрдВ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рднреА рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реИрд▓реА-рд╕рдВрд╕рд╛рдзрдиреЛрдВ-рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рдХреБрдЫ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реЛ?

{
  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 рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛

@ рдореИрдереНрдпреВ-рдбреАрди ean

@PengJiyuan рдЖрдк рдПрдХ рдХреНрд▓реЛрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд░реЗрдкреЛ рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?

+1
image
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рдХреЛрдб рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреА рд╣реИред рдЯреНрд░реА рдиреЛрдб рдореЗрдВ рдЧрд▓рдд fileInfo рд╣реИ, рд╕рдорд╛рдирд╛рдВрддрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЗрдирдкреБрдЯ рд╕реНрд░реЛрдд рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред

+1
image
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рдХреЛрдб рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреА рд╣реИред рдЯреНрд░реА рдиреЛрдб рдореЗрдВ рдЧрд▓рдд fileInfo рд╣реИ, рд╕рдорд╛рдирд╛рдВрддрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЗрдирдкреБрдЯ рд╕реНрд░реЛрдд рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред

@ рдореИрдереНрдпреВ-рдбреАрди рдПрдХ рдорд┐рдирдЯ рд░реБрдХреЛ, рд╣рдо рдПрдХ рдорд┐рдиреА рд░реЗрдкреЛ рдмрдирд╛рддреЗ рд╣реИрдВред рд╣рдо рдХреЛрдб рдХреА рдЗрд╕ рд▓рд╛рдЗрди рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ ...

+1
image
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рдХреЛрдб рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреА рд╣реИред рдЯреНрд░реА рдиреЛрдб рдореЗрдВ рдЧрд▓рдд fileInfo рд╣реИ, рд╕рдорд╛рдирд╛рдВрддрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЗрдирдкреБрдЯ рд╕реНрд░реЛрдд рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред

рдХреЛрдб рдХреА рдпрд╣ рд▓рд╛рдЗрди 3.10.0 рдХреЗ рдмрд╛рдж рд╕реЗ рджрд┐рдЦрд╛рдИ рджреА рд╣реИ

@PengJiyuan рдЖрдк рдПрдХ рдХреНрд▓реЛрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд░реЗрдкреЛ рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?

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

рдпрд╣ рд░реЗрдкреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдк 'рдПрдирдкреАрдПрдо рд░рди рдмрд┐рд▓реНрдб' рдХреЗ рд╕рд╛рде рджреМрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдбрд┐рд╕реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВред

@PengJiyuan рдЖрдк рдПрдХ рдХреНрд▓реЛрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд░реЗрдкреЛ рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?

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

рдпрд╣ рд░реЗрдкреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдк 'рдПрдирдкреАрдПрдо рд░рди рдмрд┐рд▓реНрдб' рдХреЗ рд╕рд╛рде рджреМрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдбрд┐рд╕реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВред

@ рдореИрдереНрдпреВ-рдбреАрди

@ рдореИрдереНрдпреВ-рдбреАрди рд╣рдо @plugin рдХрд╛ рдЙрдкрдпреЛрдЧ

@PengJiyuan рдпрджрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВ, рддреЛ рд╕реНрд░реЛрдд рдореИрдк рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдХреЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ рдкреНрд░рд╢реНрди рдореЗрдВ рдХреЛрдб рдХреЛ рдЪрдВрдХ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

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

рдпрд╣ рдПрдХ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдлрд┐рдХреНрд╕ рд╣реЛрдЧрд╛, рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЧрд▓рдд рдЖрдпрд╛рдд рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреНрдпреЛрдВ рд╣реИред (рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЗрд╕рдХрд╛ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред)

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЬрд▓реНрдж рд╣реА рдЕрд╕реНрдерд╛рдпреА рдмреИрдВрдб-рд╕рд╣рд╛рдпрддрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рдХрд╛рд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдКрдВрдЧрд╛ред

@PengJiyuan @kirazxyun @Justineo рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ [email protected]

рдХрдо @ 3.13.0-alpha.3 рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣рд▓

@ рдореИрдереНрдпреВ-рдбреАрди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж ean

@ рдореИрдереНрдпреВ-рдбреАрди рдХреА рдкреБрд╖реНрдЯрд┐ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ [email protected] , рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрдж рд╣реА рдЙрдореНрдореАрдж рдХрд░

рдЗрд╕реЗ рдХрдо@3.13.0-alpha.3 рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛

3.13.1 рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ

4.0.0 рднреА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдлрд┐рдХреНрд╕ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

papandreou picture papandreou  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

renoth picture renoth  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MarkSG93 picture MarkSG93  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

awebdev picture awebdev  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

chricken picture chricken  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ