Less.js: рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдЙрдкрдпреЛрдЧ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдЬрдире░ 2016  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: less/less.js

рдирдорд╕реНрддреЗ!
рдореИрдВ рдЕрдкрдиреЗ рд╕реНрдирд╛рддрдХ рдХреА рдереАрд╕рд┐рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдо 2 рдПрд╕рдПрдПрд╕ рдХрдирд╡рд░реНрдЯрд░ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдПрдХ рдПрд╕рдПрдПрд╕ 2 рд░рд╣рд┐рдд рдХрдирд╡рд░реНрдЯрд░ рднреА рдмрдирдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдПрдПрд╕рдЯреА рдХреЛ рдХрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЦреЛрдЬ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

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

рдореБрдЭреЗ рдПрдПрд╕рдЯреА рд╡рд╛рдкрд╕ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдПрдХ рдФрд░ рдХрдо рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рддрд╛ред рдХреЛрдб рд╕реЗ рдореБрдЭреЗ рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╛рд░реНрд╕рд░ рдХреЛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ рдЖрдпрд╛рдд рдкреНрд░рдмрдВрдзрдХ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрджрд┐ред рдХреНрдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рд╕рдВрдХреЗрдд рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрдПрд╕рдЯреА рдХрдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ, рдЕрдЧрд░ рдореБрдЭреЗ рдЗрд╕рдХреА рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдкрддрд╛ рд╣реИ?

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

рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ :) рдореИрдВ рдпрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдбрд╛рд▓ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдПрдПрд╕рдЯреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдПрдХ рд╣реА рдмрд╛рдзрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрддрд╛ рд╣реИред

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

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

рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛? https://github.com/matthew-dean/postcss-less/blob/master/lib/render.js

рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдП рдЧрдП рдПрдПрд╕рдЯреА рдкреЗрдбрд╝ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдП рдЧрдП рдкреЗрдбрд╝ рдореЗрдВ рдЧреИрд░-рдореВрд▓реНрдпрд╛рдВрдХрди рд╡рд╛рд▓реЗ рдкреЗрдбрд╝ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рдПрдПрд╕рдЯреА рд╡рд╛рдкрд╕ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдПрдХ рдФрд░ рдХрдо рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рддрд╛ред

рдпрд╣ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд╕ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЪреВрдХ рдирд╣реАрдВ рд░рд╣реЗ рд╣реИрдВ:

рдФрд░ рдлрд┐рд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдлрд╝реАрд▓реНрдб рдХреЛ рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдХрдо рдЖрдпрд╛рдд рдХреЗ рд╕рднреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрднрд╛рд▓реЗрдЧрд╛ред

рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ-рдпреВрд╕реЗрдЬ рдореЗрдВ (рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг https://github.com/less/less.js/issues/2342#issuecomment-67596931 рдореЗрдВ)ред

рдХрд┐ рдкрд╛рд░реНрд╕рд░ рдХреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ importManager рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрджрд┐ред

рдЬрд╝рд░реБрд░реА рдирд╣реАрдВред рдЖрдпрд╛рдд рдкреНрд░рдмрдВрдзрдХ (рдореЛрдЯреЗ рддреМрд░ рдкрд░) рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рд╕рднреА рдЖрдпрд╛рдд (рдЖрдорддреМрд░ рдкрд░) рдкрд╛рд░реНрд╕рд░ рдХреЗ рднреАрддрд░ рд╣реА рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ :) рдореИрдВ рдпрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдбрд╛рд▓ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдПрдПрд╕рдЯреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдПрдХ рд╣реА рдмрд╛рдзрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрддрд╛ рд╣реИред

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 рдХреА рдЖрдВрддрд░рд┐рдХ рдЖрдпрд╛рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреНрдпрд╛ рд╣рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдПрд╕рдЯреА рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВрдиреЗ рдЕрднреА рд╕реНрд░реЛрдд рдХреЛрдб рдкрдврд╝рд╛ рдФрд░ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдореИрдВ рдЖрдпрд╛рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП { processImports: false } рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :)

less.parse(content, { processImports: false }, (e, tree) => {
  if (e) { return console.error(e) };
  return console.log(tree);
})

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

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

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

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

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

xblakestone picture xblakestone  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dotnetwise picture dotnetwise  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ