Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΊΠΎΠ΄ Π²ΡΠΎΠ΄Π΅ Π΄Π½Π°.
@root-name: business-bundle
/* other file */
.@{root-name} .wrapper{
/* css... */
}
ΠΠΎΠ³Π΄Π° webpack ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ΅Π½ΡΡΠ΅ 3.12.2, ΡΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ. ΠΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ 3.13.0 Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΡΠ±ΠΎΡΠΊΠΈ Π²Π΅Π±-ΠΏΠ°ΠΊΠ΅ΡΠ°.
@TopGrd ΠΡΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Less Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ. ΠΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ ΡΠ΅ΠΏΠΎ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΡΠΎΠ²ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ? ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π»ΠΈ ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ lessc
Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° Less?
Π£ ΠΌΠ΅Π½Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ v3.13.0 - 3.12.2.
ΠΡΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΡΡΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ, Π³Π΄Π΅ Π² ΠΌΠ΅Π½ΡΡΠ΅ΠΌ ΡΠ°ΠΉΠ»Π΅ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ.
@endbay @TopGrd
Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π·Π΄Π΅ΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ. ΠΠ΅Π· Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π½Π΅ Π²ΡΠ΄Π°Π½Π½ΠΎΠΉ Π² ΡΠ°ΠΌΠΎΠΌ Less, Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½Π°Π΄Π΅ΠΆΠ΄Ρ Π½Π° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠΌΡ-ΡΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΡΠΊΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π° ΠΏΡΠΈ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ ΠΎΠΆΠΈΠ΄Π°Π»ΡΡ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ Π΅Π³ΠΎ Π½Π΅Ρ.
@TopGrd
ΠΠ΄Π½Π° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°, ΡΡΠΎΡ ΠΊΠΎΠ΄ 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 ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°. Π― ΠΏΡΡΠ°ΡΡΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΡΠΎ Π² Π΄Π΅ΠΌΠΎ
@TopGrd
ΠΠ΄Π½Π° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°, ΡΡΠΎΡ ΠΊΠΎΠ΄ 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',
},
},
],
},
ΠΠΎΠΉ ΠΊΠΎΠ΄:
ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ less.render
output: Π½Π΅Ρ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ°
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ @{bundle-root-class}
ΡΠ°Π²Π½Π° settingBundle
. ΠΠΎΡ
ΠΎΠΆΠ΅, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ?
ΠΠΎ ΡΠΈΡ ΠΏΠΎΡ Π½Π΅ ΠΌΠΎΠ³Ρ Π½Π°ΠΉΡΠΈ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ. ΠΡΠ΅Π½Ρ ΡΡΡΠ°Π½Π½ΠΎ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π³ΠΎΡΡΡΠ°Ρ Π·Π°ΠΌΠ΅Π½Π° ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ. Π ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ°:
<strong i="6">@import</strong> "./lib.less";
.@{prefix}-button {
val: @prefix;
}
ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π²:
{
val: foo;
}
(ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π²Π΅ΡΡ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΠ°ΡΡΡ.)
@Justineo
ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ
ΠΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ? Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ Less ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ, Π½ΠΎ ΠΎΠ½ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ?
ΠΡΠ΅Π½Ρ ΡΡΡΠ°Π½Π½ΠΎ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π³ΠΎΡΡΡΠ°Ρ Π·Π°ΠΌΠ΅Π½Π° ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ.
@Justineo ΠΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°. ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠ³ΠΎ Π²ΠΎΠΏΡΠΎΡΠ° :
ΠΠΎΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, Π΄ΡΠ΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠ΅ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΎ ΠΈΠ· Less Π½Π° ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π²ΡΠ΅ΠΌΡ, Π½ΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ ΠΎΠ½ΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°Π»ΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠΈΠ»ΡΠ½ΠΎΠ΅ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π²ΡΡΠ°Π²ΠΈΠ» Π΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ Less Π½Π΅ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΄Π΅ΡΠ΅Π²ΡΠ΅Π² ΠΈΠΌΠΏΠΎΡΡΠ°. , ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π’ΠΠΠ¬ΠΠ Π² Β«ΠΆΠΈΠ²ΠΎΠΉΒ» ΡΡΠ΅Π΄Π΅, Π³Π΄Π΅ less.parse Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·. Π₯ΠΌ, ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΌΠΎΠ³Ρ Π»ΠΈ Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΡ ΡΠ΅ΠΎΡΠΈΡ Π½Π° ΡΠ΅ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΈ.
@Justineo @TopGrd @endbay
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Ρ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ ΠΌΠΎΠ³Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π΅ Π½Π΅Π»ΡΠ·Ρ ΠΎΡΠ»Π°Π΄ΠΈΡΡ. βΉοΈ ΠΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅ΠΏΠΎ, Π³Π΄Π΅ Π΅Π³ΠΎ Π»Π΅Π³ΠΊΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ, Ρ ΠΌΠΎΠ³Ρ ΠΏΡΠΎΠΉΡΠΈ ΡΠ΅ΡΠ΅Π· Π½Π΅Π³ΠΎ.
Π£ ΠΌΠ΅Π½Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π² Π²Π΅ΡΡΠΈΠΈ 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
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΡΠ·Π²Π°Π½Π° ΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Π£Π·Π΅Π» Π΄Π΅ΡΠ΅Π²Π° ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ°ΠΉΠ»Π΅. Π ΡΠ»ΡΡΠ°Π΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΈΠ·-Π·Π° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ inputSource Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½.
+1
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΡΠ·Π²Π°Π½Π° ΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Π£Π·Π΅Π» Π΄Π΅ΡΠ΅Π²Π° ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ°ΠΉΠ»Π΅. Π ΡΠ»ΡΡΠ°Π΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΈΠ·-Π·Π° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ inputSource Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½.
@ matthew-dean ΠΠΎΠ³ΠΎΠ΄ΠΈΡΠ΅, ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΌΠΈΠ½ΠΈ ΡΠ΅ΠΏΠΎ. ΠΡ Π½Π°ΡΠ»ΠΈ ΡΡΡ ΡΡΡΠΎΠΊΡ ΠΊΠΎΠ΄Π°, Π½Π°Π΄Π΅Π΅ΠΌΡΡ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ Π±ΡΡΡΡΠΎ Π΅Π΅ ΡΠ΅ΡΠΈΡΡ ...
+1
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΡΠ·Π²Π°Π½Π° ΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Π£Π·Π΅Π» Π΄Π΅ΡΠ΅Π²Π° ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ°ΠΉΠ»Π΅. Π ΡΠ»ΡΡΠ°Π΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΈΠ·-Π·Π° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ 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, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
@PengJiyuan @kirazxyun @Justineo ΠΈ Ρ. Π. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
[email protected]