ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ!
Π― ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π°Π΄ ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅ΡΠΎΠΌ less2sass Π΄Π»Ρ ΡΠ²ΠΎΠ΅ΠΉ Π±Π°ΠΊΠ°Π»Π°Π²ΡΡΠΊΠΎΠΉ Π΄ΠΈΡΡΠ΅ΡΡΠ°ΡΠΈΠΈ, ΠΏΠΎΠ·ΠΆΠ΅ ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠ°ΡΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅ΡΠΎΠΌ sass2less. Π― ΠΈΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ»ΡΡΠΈΡΡ AST ΠΈΠ· ΠΌΠ΅Π½ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π― ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π» ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:
var parser = new(less.Parser)({}, {contents: {}}, {});
var contents = ".foo {\
background: #900;\
}\
<strong i="7">@import</strong> \"import/this-is-valid.less\";";
parser.parse(contents, function (e, tree) {
console.log(JSON.stringify(tree, null, 2));
});
Π― ΠΏΠΎΠ»ΡΡΠ°Ρ AST ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Ρ Π½Π΅ ΠΏΡΡΠ°ΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°ΠΉΠ» less. ΠΠ· ΠΊΠΎΠ΄Π° Ρ ΠΏΠΎΠ½ΡΠ», ΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ ΠΈΠΌΠΏΠΎΡΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ importManager, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½ΡΠΆΠ΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈ Ρ. Π. ΠΠΎΠ³Ρ Π»ΠΈ Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ AST ΠΌΠ΅Π½ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡ, Π΅ΡΠ»ΠΈ Ρ Π·Π½Π°Ρ Π΅Π³ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ»?
ΠΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ? https://github.com/matthew-dean/postcss-less/blob/master/lib/render.js
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ΅Π½Π΅Π½Π½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ AST, ΠΈ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΠΎΡΠ΅Π½Π΅Π½Π½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π½Π΅ΠΎΡΠ΅Π½Π΅Π½Π½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ.
Π― ΠΏΠΎΠ»ΡΡΠ°Ρ AST ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Ρ Π½Π΅ ΠΏΡΡΠ°ΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°ΠΉΠ» less.
ΠΠ»Ρ ΠΈΠΌΠΏΠΎΡΡΠ° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°Π·Π½ΠΈΡΡ, ΠΏΡΠΎΡΡΠΎ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Ρ Π½Π΅ ΠΏΡΠΎΠΏΡΡΡΠΈΠ»ΠΈ:
Π° Π·Π°ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ ΠΊΠ°ΠΊ ΠΈΠΌΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. less Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π²ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΈΠΌΠΏΠΎΡΡΠ°.
Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ (ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌ. https://github.com/less/less.js/issues/2342#issuecomment-67596931).
ΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ ΠΈΠΌΠΏΠΎΡΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ importManager, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½ΡΠΆΠ΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈ Ρ. Π΄.
ΠΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌ. importManager (ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ) ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ°, ΠΈ Π²Π΅ΡΡ ΠΈΠΌΠΏΠΎΡΡ (ΠΎΠ±ΡΡΠ½ΠΎ) ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π²Π½ΡΡΡΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ°.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π²Π°ΠΌ, ΡΠ΅Π±ΡΡΠ°. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΡΠ΅Π½Π° :) Π― ΠΏΠΎΠΌΠ΅ΡΠ°Ρ Π·Π΄Π΅ΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ AST, Π½Π° ΡΠ»ΡΡΠ°ΠΉ, Π΅ΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΡΡ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠ΅ΠΌ ΠΈ ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.
var less = require('less')
, fs = require('fs')
, path = require('path');
var src = './test_import.less'; //some less source file
var result = less.parse(fs.readFileSync(src).toString(), {
filename: path.resolve(src)
}, function(e, tree) {
console.log(JSON.stringify(tree, null, 2));
});
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΠΈΠΉ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅? Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΎΡΠΎΠ±ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π΄Π»Ρ ΠΏΡΡΠ΅ΠΉ ΠΈΠΌΠΏΠΎΡΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠΌΠΏΠΎΡΡΠ° less.js Π½Π΅ Π±ΡΠ΄Π΅Ρ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½. ΠΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΡ Π² AST Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΡΠ΅Π½ΠΊΠΈ?
Π― ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π» ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ», ΡΡΠΎ ΠΌΠΎΠ³Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ { processImports: false }
ΡΡΠΎΠ±Ρ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠΌΠΏΠΎΡΡΠ°, Ρ ΠΌΠ΅Π½Ρ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ :)
less.parse(content, { processImports: false }, (e, tree) => {
if (e) { return console.error(e) };
return console.log(tree);
})
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π²Π°ΠΌ, ΡΠ΅Π±ΡΡΠ°. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΡΠ΅Π½Π° :) Π― ΠΏΠΎΠΌΠ΅ΡΠ°Ρ Π·Π΄Π΅ΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ AST, Π½Π° ΡΠ»ΡΡΠ°ΠΉ, Π΅ΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΡΡ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠ΅ΠΌ ΠΈ ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.