Handlebars.js: NPM ν•Έλ“€λ°”λŠ” 자체 사전 컴파일된 데이터λ₯Ό 읽을 수 μ—†μŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2015λ…„ 05μ›” 30일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: handlebars-lang/handlebars.js

Handlebars λ¬Έμ„œ 에 λ”°λ₯΄λ©΄ $#$ Handlebars.precompile() templateSpec 은 Handlebars.template() 에 μ˜ν•΄ 직접 μ†ŒλΉ„ κ°€λŠ₯ν•΄μ•Ό ν•˜μ§€λ§Œ 였λ₯˜ μŠ€νƒμ—μ„œ μ „μžλŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κ³  ν›„μžλŠ” 개체λ₯Ό κΈ°λŒ€ν•©λ‹ˆλ‹€.

λ‹€μŒμ€ 문제λ₯Ό μž¬ν˜„ν•˜λŠ” μΈμœ„μ μΈ μ˜ˆμž…λ‹ˆλ‹€.

var Handlebars = require('handlebars');

console.log(Handlebars.VERSION);

var pre = Handlebars.precompile('{{foo}}');
var template = Handlebars.template(pre);

그리고 κ΄€λ ¨ 좜λ ₯

$ node contrived.js 
3.0.1

/private/tmp/hbs-bug/node_modules/handlebars/dist/cjs/handlebars/runtime.js:48
    throw new _Exception2['default']('Unknown template object: ' + typeof temp
          ^
Error: Unknown template object: string
    at Object.template (/private/tmp/hbs-bug/node_modules/handlebars/dist/cjs/handlebars/runtime.js:48:11)
    at HandlebarsEnvironment.hb.template (/private/tmp/hbs-bug/node_modules/handlebars/dist/cjs/handlebars.runtime.js:46:20)
    at Object.<anonymous> (/private/tmp/hbs-bug/contrived.js:7:27)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

그것이 λ‚΄κ°€ λ‘λ €μ› λ˜ 것이닀. eval을 μ‚¬μš©ν•˜λŠ” λŒ€μ‹  μ‹€μ œ 객체λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄ μ¦‰μ‹œ ν˜ΈμΆœν•œ ν•¨μˆ˜ μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜κΈ°λ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μ‚¬λžŒμ΄ μœ μš©ν•˜λ‹€κ³  μƒκ°ν•˜λŠ” 경우 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

var preStr = Handlebars.precompile('{{foo}}');
var pre = (new Function('return ' + preStr)());
var template = Handlebars.template(pre);

핸듀바에 μ‰½κ²Œ 톡합될 수 μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

λͺ¨λ“  4 λŒ“κΈ€

사전 μ»΄νŒŒμΌμ€ JavaScript μ†ŒμŠ€κ°€ ν¬ν•¨λœ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€. 컴파일 방법을 μ‚¬μš©ν•˜λŠ” 것과 λ™μΌν•œ ν™˜κ²½μ—μ„œ μ‹€ν–‰λ˜λ„λ‘ μ˜λ„λœ 것이 μ•„λ‹™λ‹ˆλ‹€. μ–΄λ–€ 이유둜 이 μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” 경우 ν…œν”Œλ¦Ώμ— μ „λ‹¬ν•˜κΈ° 전에 이 λ¬Έμžμ—΄μ„ 평가해야 ν•©λ‹ˆλ‹€.

그것이 λ‚΄κ°€ λ‘λ €μ› λ˜ 것이닀. eval을 μ‚¬μš©ν•˜λŠ” λŒ€μ‹  μ‹€μ œ 객체λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄ μ¦‰μ‹œ ν˜ΈμΆœν•œ ν•¨μˆ˜ μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜κΈ°λ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μ‚¬λžŒμ΄ μœ μš©ν•˜λ‹€κ³  μƒκ°ν•˜λŠ” 경우 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

var preStr = Handlebars.precompile('{{foo}}');
var pre = (new Function('return ' + preStr)());
var template = Handlebars.template(pre);

핸듀바에 μ‰½κ²Œ 톡합될 수 μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

게으λ₯΄μ§€ μ•Šκ³  Handlebars.compile을 효과적으둜 κ΅¬ν˜„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
νŽΈμ§‘. μ‚¬μš©ν•˜λ €λŠ” ν…œν”Œλ¦Ώμ— 미리 μ»΄νŒŒμΌμ„ μ‚¬μš©ν•˜λŠ” 이유
같은 사둀?
2015λ…„ 5μ›” 31일 μΌμš”μΌ μ˜€ν›„ 4:42 Nathan Witt [email protected]
썼닀:

그것이 λ‚΄κ°€ λ‘λ €μ› λ˜ 것이닀. eval을 μ‚¬μš©ν•˜λŠ” λŒ€μ‹ 
ν•¨μˆ˜ μƒμ„±μžλŠ” λ‚˜μ—κ²Œ μ‹€μ œλ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄ μ¦‰μ‹œ ν˜ΈμΆœν–ˆμŠ΅λ‹ˆλ‹€.
물체. λ‹€λ₯Έ μ‚¬λžŒμ΄ μœ μš©ν•˜λ‹€κ³  μƒκ°ν•˜λŠ” 경우 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

var preStr = Handlebars.precompile('{{foo}}');
var pre = (new Function('return ' + preStr)());
var ν…œν”Œλ¦Ώ = ν•Έλ“€λ°”.ν…œν”Œλ¦Ώ(사전);

핸듀바에 μ‰½κ²Œ 톡합될 수 μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

β€”
이 이메일에 직접 λ‹΅μž₯ν•˜κ±°λ‚˜ GitHubμ—μ„œ ν™•μΈν•˜μ„Έμš”.
https://github.com/wycats/handlebars.js/issues/1033#issuecomment -107249447
.

μŠ€ν¬λ¦½νŠΈλŠ” 이메일 ν…œν”Œλ¦Ώμ„ μœ„ν•œ 개발 λ„κ΅¬μž…λ‹ˆλ‹€. 미리 컴파일된 μ†ŒμŠ€λŠ” ν”„λ‘œλ•μ…˜μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ—…λ‘œλ“œλ˜μ§€λ§Œ μ™„μ „ν•œ 둜컬 미리 보기도 μƒμ„±ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ 곡톡 μ†ŒμŠ€μ—μ„œ λ‘˜ λ‹€ 얻을 수 있기 λ•Œλ¬Έμ— μ»΄νŒŒμΌμ„ μ‚¬μš©ν•˜μ§€ μ•ŠκΈ°λ‘œ μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰