less λ νμ¬ fileManager
loadFile
λλ loadFileSync
λ₯Ό νΈμΆνκΈ°λ‘ κ²°μ ν©λκΉ? μ΄ μ½λ μ λ°λ₯΄λ©΄ isSync
-parameterλ₯Ό μ€μ ν΄μΌ ν©λλ€. κ·Έλ¬λ getFileManager
νΈμΆμ μ§§κ² κ²μνλ©΄ μ΄ μ΅μ
μ΄ lib/less/functions/data-uri.js
μμλ§ μ¬μ©λλ€λ κ²μ μ μ μμ΅λλ€.
render()
νΈμΆν λ μ΄ μ΅μ
μ λͺ
μμ μΌλ‘ μ€μ ν μ μμ΅λκΉ?
isSyncλ λ λλ§ν μ΅μ
κ°μ²΄μ μ λ¬ν μ μμ΅λλ€. data-uriλ νμ
ν¨μλ λΉλκΈ°μμΌ μ μκΈ° λλ¬Έμ λκΈ°νν©λλ€.
κ·Έλ¬λ importManager
λ getFileManager
μ΅μ
μ μ λ¬ νμ§ μμ΅λλ€ ...
μ¬κΈ°μμ μλ£
κ·Έ μ΅μ μ λ μ μ μ½μ΄μμ 무μλκ³ λΈλΌμ°μ μλ§ μ μ©λκΈ° λλ¬Έμ λλ€. λ°λΌμ λΈλΌμ°μ λ νμ λΉλκΈ°λΌκ³ νλ©° μ΅μ μ λ°λΌ λκΈ°ν λλ λΉλκΈ° λ©μ»€λμ¦μ μ¬μ©νμ¬ νμΌμ κ°μ Έμ¬ μ μμ΅λλ€.
μΌλ§λ νΌλμ€λ¬μ΄μ§ μ μ μμ΅λλ€. λ¬Έμ λ₯Ό μΌμΌν€λκ°?
λ΄κ° μ¦μ 보λ ν κ°μ§λ νμ΄μ§ λ‘λ μ μ΅μ μ μν΄μλ§ μν₯μ λ°μΌλ―λ‘ λμ€μ μ€μ λκ±°λ μ΅μ μΌλ‘ μ λ¬λλ©΄ 무μλ©λλ€.
κΈμ, μλ§λ λ΄ μ¬μ© μ¬λ‘λ₯Ό μ€λͺ ν΄μΌ ν κ²μ λλ€.
webpack μ λν΄ λ λ‘λ λ₯Ό μμ±νμ΅λλ€ . webpackμλ μ체 ν΄κ²° λ©μ»€λμ¦μ΄ μκΈ° λλ¬Έμ νλ¬κ·ΈμΈμ μ¬μ©νμ¬ νμΌ κ΄λ¦¬μλ₯Ό ν΅ν΄ λ μ μ νμΌμ μ°κ²°νκ³ μμ΅λλ€.
Webpackμ λκΈ°ν λ° λΉλκΈ° λ‘λλ₯Ό μ§μνμ§λ§ λͺ¨λ νμΌμ λκΈ°ν λλ λΉλκΈ°μ μΌλ‘ λ λλ§νλλ‘ λ μ§μνλ λ°©λ²μ μ°Ύμ§ λͺ»νμ΅λλ€. νμ¬ νμ loadFile
νΈμΆν©λλ€. λ°λΌμ λκΈ° μ»΄νμΌμ΄ μμ²λ λ loadFileSync
λ₯Ό νΈμΆνκΈ° μν΄ λν° ν΅ μ μ¬μ©νμ΅λλ€. μ΄ μ’κ²λ μ½λ°±μ΄ λκΈ°μμΌλ‘ νΈμΆλ λ λκΈ°μμΌλ‘ λ μλν©λλ€(λ¬Όλ‘ μ μμ μΈ μν©μμλ μνλμ§ μμμΌ ν¨).
μ κ² μ΄μ...
λΉλκΈ° μ΅μ μ λ μ μ 컨ν μ€νΈλ‘ μ΄λν λ€μ μ΄λ₯Ό μ¬μ©νμ¬ μ μν λλ‘ μ΄λ€ νΈμΆμ μνν μ§ κ²°μ ν΄μΌ νλ€κ³ μκ°ν©λλ€. λΈλΌμ°μ νμΌ κ΄λ¦¬μμ μ½κ°μ λ³κ²½μ΄ νμν μ μμ§λ§ μ’μ 리ν©ν°κ° λ κ²μ΄λΌκ³ μκ°ν©λλ€.
λ©μλ!
λ¨ νλμ λ¬Έμ κ° μμ΅λλ€. callback
λ₯Ό μλ½νλ©΄μ λκΈ°μ μΌλ‘ 무μΈκ°λ₯Ό νλ κ²μ λ§€μ° μ΄λ‘μ μΈ μΌμ
λλ€( render
-functionμ΄ νλ κ²μ²λΌ). λ€μκ³Ό κ°μ sync
-μ΅μ
μ μ μνκ³ μμ΅λλ€.
less.render(
input,
{ ... sync: true ... },
function (err, result) {
}
);
?
Imho μ½λ°±μ΄ λκΈ°μ μΌλ‘ νΈμΆλλ κ²μ΄ μ΄μν©λλ€. λ€μκ³Ό κ°μ APIλ₯Ό κΈ°λν©λλ€.
// async
less.render(input, option, callback);
// sync
var result = less.renderSync(input, option);
λ€ λ§μ΅λλ€. κ·Έκ² λ μ’μ΅λλ€.
+1
μ½λ°±μμλ§ μ½λ μ€νμ μ ννμ§ μλλ‘ renderSync
ꡬνμ κ³ λ €νλ κ²λ λ§€μ° μ μ©ν κ² κ°μ΅λλ€. μ½λ°± λ²μμμ console.err
λλ throw new Error()
λλ μλμ μΈ JavaScript μ€λ₯μ κ°μ λ§μ λ©μλλ μ½μμ μ무 κ²λ μΈμνμ§ μκ³ μ½λ μ€νλ§ μ€μ§νμ¬ μ μ¬μ μΌλ‘ μΆμ ν μ μλ λ²κ·Έλ‘ μ΄μ΄μ§ μ μμ΅λλ€. λλμ΄ νλμ΄ μΌμ΄λμλ μλλ€κ³ μμν κ²μ
λλ€.
λ΄ νΉλ³ν κ²½μ° renderSync
λͺ
λ Ήμ€ μ νΈλ¦¬ν°μμ μ¬μ©λλ©° λ§€λ² λͺ¨λ μΆλ ₯κ³Ό μ€λ₯κ° μμλλ‘ μΈμλλλ‘ μ½μμ μ¬μ©νμ¬ μ½λ°± νλ¦μ μ μ΄νλ ββλμ renderSyncλ₯Ό μ¬μ©νκ³ κ·Έκ²μ λν΄ κ±±μ νκΈ° μν΄.
(λ¬Έμ μ체λ₯Ό λΉννλ κ²μ΄ μλλΌ λ¬Έμ κ° λ μ΄μ μ΄μν΄μ§μ§ μλλ‘ νκΈ° μν κ²μ λλ€.)
Imho μ½λ°±μ΄ λκΈ°μ μΌλ‘ νΈμΆλλ κ²μ΄ μ΄μν©λλ€.
μ΄κ²μ κ³Όμ₯μ
λλ€... μ΄ μ½λ
μ½λ°±μ λ¨μ§ μ½λ°±μΌ λΏμ΄λ©° κ·Έ μ체λ‘λ λκΈ°ν/λΉλκΈ°μ μ무 κ΄λ ¨μ΄ μμ΅λλ€.
μ’μμ, callback
: wink: λΌλ μ©μ΄μ λν΄ μ΄μΌκΈ°ν νμκ° μμ΅λλ€
μΌλΆλ forEach
a callback
( MDN λ± )μ μ λ¬λ ν¨μλ₯Ό νΈμΆν©λλ€. λμκ² μ½λ°±μ μμ
μ΄ μλ£λ λ νΈμΆλλ κ²μ΄κΈ° λλ¬Έμ κ·Έλ κ² λΆλ₯΄μ§ μμ κ²μ
λλ€.
κ·Έλ¦¬κ³ μ½λ°±μ΄ λ
Έλμ μ€λ₯ κ·μΉμ λ°λ₯΄κ³ 첫 λ²μ§Έ μΈμκ° null
μ΄κ±°λ μ€λ₯μΈ κ²½μ° λΉλκΈ°μμΌλ‘ _νμ_ νΈμΆν μΆ©λΆν μ΄μ κ° μμ΅λλ€.
μΌλΆλ
forEach
μ½λ°±μ μ λ¬λ ν¨μλ₯Ό νΈμΆν©λλ€.
λκ΅°κ°κ° node
λ₯Ό λ무 λ§μ΄ μ¬μ©νκ³ μμ΅λλ€ ;) λͺ¨λκ° μ΄κ²μ "μ½λ°±"μ΄λΌκ³ λΆλ¦
λλ€. λ°λΌμ "μμ
μ΄ μλ£λμμ λ νΈμΆλλ μ½λ°± ν¨μ"μ κ΄ν κ²μ΄λΌλ©΄ "λΉλκΈ° μ½λ°±"μ μ§λμ§ μμ΅λλ€.
νμ§λ§ μ κ²½μ°μ§ λ§μΈμ. μ£μ‘ν©λλ€. μ λ COμ²λΌ λ€λ¦¬κ³ μ΄ μμ ν μΈμ΄μ ν λ‘ μ μμνλ €λ μλκ° μλμμ΅λλ€(λ¨μ§ μ°λ¦¬κ° λμΌν μΈμ΄λ₯Ό λ§νκ³ λ¬Έμμμ μ€μ λ‘ less.render
κ° λκΈ°μμμ μΈκΈνλλ‘ νκ³ μΆμμ΅λλ€).
μΆμ λ λͺ νννκΈ° μν΄ :
@kwketh
μ΄ less.render
μμμ λͺ λ
λμ μ‘΄μ¬ν΄ μμΌλ©°, μμ² κ°μ μ€λν«μ κΉ¨κΈ° μν΄ μ무 κ²λ μλ κ²μΌλ‘λΆν° λ³κ²½ν μ μμ΅λλ€.
@seven-phases-max
κ·νμ λ΅λ³μ κ°μ¬λ립λλ€. λͺ¨λ λμμ΄ λ©λλ€. μ½λ°±μ κ΄ν κ·νμ λͺ¨λ μ견μ λμν©λλ€. λλ .render
μ½λλ₯Ό μμ£Ό κ°λ΅νκ² μ΄ν΄λ³΄μκ³ λΉμ μ΄ μ³μμ΅λλ€. μμ±λ νμμ λͺ¨λ μ½λ°±μ μ€μ¬μΌλ‘ λμκ°λ©° renderSync
λ₯Ό κ°λ κ²μ΄ μ½μ§λ ν©λ¦¬μ μ΄μ§λ μμ κ² κ°μ΅λλ€.
λ΄ λ¬Έμ λ μ΄λ»κ² λ λ€λ₯΄μ§λ§ κ΄λ ¨μ΄ μμ΅λλ€ (https://github.com/less/less.js/issues/2546). renderSync
κΈ°λ₯μ ꡬννλ©΄ λ΄ λ¬Έμ κ° ν΄κ²°λμ§λ§ κΆκ·Ήμ μΈ μ루μ
μ μλλλ€.
빨리 λ΄μ£Όμ€λμ? μ λ§ κ°μ¬ν©λλ€.
κ°μ¬ ν΄μ.
λκ΅°κ° λ무 λ§μ λ Έλλ₯Ό μ¬μ©νκ³ μμ΅λλ€.
κ·Έκ² μ¬μ€μ λλ€.
κ·Έλ¬λ λ Έλμ μ½λ°± κ·μΉμ μ μ 립λμ΄ μμ΅λλ€. μ΄ κ²½μ° μ½λ°±μ΄ νμ λΉλκΈ°μμΌλ‘ νΈμΆλλ€κ³ κ°μ ν©λλ€.
μΆκ°: μ€λ₯κ° λ°μνμ λ μ€λ₯λ μ΄λ»κ² μ²λ¦¬λ©λκΉ? (λλΆλΆμ λκΈ°ν APIμ κ°μ΄) λμ Έμ§κ±°λ μ½λ°±μ μΈμλ‘ μ λ¬λ©λκΉ?
νμ¬ APIκ° λͺ¨νΈνλ€λ κ²λΏμ λλ€(μ μ΄λ imho).
renderSync
μμ§ μλμ? κ·Έλ μ§ μμ κ²½μ° λκΈ° render
λν ν΄κ²° λ°©λ²μ΄ μμ΅λκΉ?
νΈμ§: Nvm. μ΄κ²μ κ±Έλ € λμ΄μ§λ λ―Έλμ μ¬λμ μν΄ μ΄κ²μ΄ λ΄κ° ν μΌμ λλ€.
less.renderSync = function (input, options) {
if (!options || typeof options != "object") options = {};
options.sync = true;
var css;
this.render(input, options, function (err, result) {
if (err) throw err;
css = result.css;
});
return css;
};
μ΄ κΈ°λ₯μ΄ μ€μ λ‘ κ΅¬νλ©λκΉ? λ¬Έμκ° μμ΅λκΉ? async
-μ΅μ
λ§ μ°Ύμ μ μμ΅λλ€.
μ€μ λ‘ μ§μλλμ§ μ¬λΆλ μ μ μμ§λ§ νμ¬ λ΄κ° ν μμ μ΄ μ μκ² ν¨κ³Όμ μ΄λΌλ κ²μ μκ³ μμΌλ―λ‘ .... μ΄κΉ¨λ₯Ό μΌμ±ν©λλ€.
@Aarilight λλ¨ν κ°μ¬ν©λλ€, κ·νμ μ½λλ λ§μ λμμ΄ λμμ΅λλ€
μ΄ λκΈ°μ μ½λ°± λμμ μ λ§ μ§κ΄μ μ΄μ§ μμ΅λλ€.
@Aarilight κ·Έκ²μ λλ₯Ό μν΄ μλνμ§ μμ΅λλ€ =(
λλ μλνλ€
less.render(css, {sync : true}, (e, result) =>{
if(e) {
console.error(e)
}
output = result;
return result
});
https://github.com/less/less.js/blob/master/lib/less/render.js κΈ°λ‘
console.log('1')
this.parse(input, options, function(err, root, imports, options) {
console.log('2')
if (err) { return callback(err); }
var result;
console.log('3')
try {
console.log('4')
var parseTree = new ParseTree(root, imports);
console.log('5')
result = parseTree.toCSS(options);
}
catch (err) {
console.log('6')
return callback(err);
}
console.log('7')
callback(null, result);
});
console.log('8')
μΌλΆ νμΌμλ 1, 8, 2,3,4,5,6,7μ΄ νμλ©λλ€.
-1 λ λλ₯Ό render
λ° renderSync
λ‘ λΆν ν©λλ€. μ΄μν Node.js κ·μΉμ
λλ€. κ·Έλ¦¬κ³ grunt / gulp / accord λλ JS κ°μ²΄λ₯Ό μ§μ λ κΈ°λ₯μΌλ‘ μ λ¬νλ lessμ ν΅ν©λ κΈ°ν μν¬νλ‘μ λκΈ°ν μ΅μ
μ 보λ΄λ κ²μ νμ©νμ§ μμ΅λλ€. IMO λΉλκΈ° μ΅μ
μ μ¬μ©ν λ μ νμ μ½λ°±μ μ λ¬νλ κ²μ΄ μ’μ΅λλ€.
λ λ€λ₯Έ μ΅μ : λΌμ΄λΈλ¬λ¦¬κ° μμνλ κ²μ λ³Έ κ²μ λ κ²½μ° λͺ¨λ μ€μ λ‘ μ½μμ λ°ννλ κ²μ λλ€. κ·Έλ° λ€μ sync/async μ¬μ΄μμ λ³κ²½λλ λͺ¨λ κ²μ μ½μμ΄ μ΄νλ λμ΄μ§λ§ κ²°κ³Όλ₯Ό μ²λ¦¬νλ μ½λλ μ νν λμΌν©λλ€.
κ·Έλ¦¬κ³ btw.:
{sync: true}
κ·Έλ° μ΅μ μ΄ μμ΅λλ€ .
-1 λ λλ₯Ό render λ° renderSyncλ‘ λΆν ν©λλ€. μ΄μν Node.js κ·μΉμ λλ€.
μμ μ£Όκ΄μ μΈ μκ° μλκ°μ? λ¨μΌ κΈ°λ₯μμ λΉλκΈ°μ λκΈ°νλ₯Ό κ²°ν©νλ IMHOλ (λͺλͺ μμΈλ μμ§λ§) λμ°ν μν° ν¨ν΄μ λλ€. 쑰건문μΌλ‘ μ΄μμ ν μ½λλ₯Ό μμ±νκ³ , μ μ§ κ΄λ¦¬κ° λ μ΄λ ΅κ³ , ν κ°μ§λ₯Ό μ μννλ λͺ ννκ² μ μλκ³ λ¬Έμνλ ν¨μλ³΄λ€ μ¬μ©μμκ² ν¨μ¬ λ νΌλμ€λ½μ΅λλ€. κ·Έλ₯ λ΄ 2c
μμ μ£Όκ΄μ μΈ μκ° μλκ°μ?
μ.
κ·ΈλΌμλ λΆκ΅¬νκ³ , λμ λ€λ₯Έ μμ μ μ£Όκ΄μ μ΄μ§ μμ΅λλ€. μ¦, ν¨μκ° λΆν λ κ²½μ° μ λ°μ΄νΈν΄μΌ ν μ μλ λΉλ νλ‘μΈμ€μμ Lessκ° μ¬μ©λ©λλ€. μλ₯Ό λ€μ΄: νμ¬ ν νλ‘μ νΈμ μ¬μ©νκ³ μλ Accord(https://github.com/jenius/accord)λ μ¬λ¬ μ»΄νμΌλ¬λ₯Ό λ¨μΌ APIλ‘ μΆμννκ³ μΌλ°μ μΌλ‘ μμ§μ νμν κΈ°λ₯μ κ°μ²΄λ₯Ό μ λ¬ν©λλ€. λ°λΌμ κ°λ°μκ° μ§μ νλ Less μ΅μ μ κΈ°λ°μΌλ‘ μ¬μ©λλ κΈ°λ₯μ μ ννλ κ²μ ν° λ¬Έμ κ° μλμ§λ§ μν₯μ λ―ΈμΉλ λΌμ΄λΈλ¬λ¦¬μ μλ νμ€νμ§ μμ΅λλ€. κ·Έκ²μ λ¨μ§ μμμΌ ν μ¬νμ λλ€.
νμ¬λ‘μλ μ΅μ
μ syncImport: true
λ₯Ό μΆκ°νλ©΄ μ΄ λ¬Έμ κ° ν΄κ²°λμμ΅λλ€.
(λ¬Έμμλ μμ΅λλ€... μμ€ μ½λμμ μ°μ°ν λ°κ²¬ν μ μμ λ§νΌ μ΄μ΄ μ’μμ΅λλ€.)
μ΄ λ¬Έμ λ μ΅κ·Ό νλμ΄ μμκΈ° λλ¬Έμ μλμΌλ‘ μ€λλ κ²μΌλ‘ νμλμμ΅λλ€. λ μ΄μ νλμ΄ μμΌλ©΄ νμλ©λλ€. κ·νμ κΈ°μ¬μ κ°μ¬λ립λλ€.
κ°μ₯ μ μ©ν λκΈ
renderSync
μμ§ μλμ? κ·Έλ μ§ μμ κ²½μ° λκΈ°render
λν ν΄κ²° λ°©λ²μ΄ μμ΅λκΉ?νΈμ§: Nvm. μ΄κ²μ κ±Έλ € λμ΄μ§λ λ―Έλμ μ¬λμ μν΄ μ΄κ²μ΄ λ΄κ° ν μΌμ λλ€.