Handlebars.js: لا تستطيع مقاود NPM قراءة البيانات المجمعة مسبقًا الخاصة بها

تم إنشاؤها على ٣٠ مايو ٢٠١٥  ·  4تعليقات  ·  مصدر: handlebars-lang/handlebars.js

وفقًا لوثائق المقاود ، يجب أن يكون templateSpec الذي تم إنشاؤه بواسطة Handlebars.precompile() قابلاً للاستهلاك مباشرة بواسطة 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

التعليق الأكثر فائدة

هذا ما كنت أخاف منه. بدلاً من استخدام EV ، على الرغم من أنني اخترت استخدام مُنشئ الدالة الذي استدعيته على الفور لإعطائي الكائن الفعلي. إليك ما سيبدو عليه أي شخص آخر إذا وجده مفيدًا.

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

يبدو أنه شيء يمكن دمجه بسهولة في المقاود.

ال 4 كومينتر

يؤدي التحويل البرمجي إلى إرجاع سلسلة بمصدر JavaScript. ليس المقصود أن يتم تشغيلها في نفس البيئة التي تستخدم فيها طريقة الترجمة فقط. إذا كنت بحاجة إلى القيام بذلك لسبب ما ، فيجب عليك تقييم هذه اللدغة قبل المرور إلى النموذج.

هذا ما كنت أخاف منه. بدلاً من استخدام EV ، على الرغم من أنني اخترت استخدام مُنشئ الدالة الذي استدعيته على الفور لإعطائي الكائن الفعلي. إليك ما سيبدو عليه أي شخص آخر إذا وجده مفيدًا.

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

يبدو أنه شيء يمكن دمجه بسهولة في المقاود.

أنت تقوم بتطبيق كومة مقاود بشكل فعال بدون كسول
التحويل البرمجي. لماذا تستخدم التحويل البرمجي المسبق للقوالب التي تخطط لاستخدامها فيها
نفس المثال؟
يوم الأحد 31 مايو 2015 الساعة 4:42 مساءً Nathan Witt [email protected]
كتب:

هذا ما كنت أخاف منه. بدلاً من استخدام EVAL على الرغم من أنني اخترت استخدام الامتداد
دالة مُنشئ التي استدعتها على الفور لإعطائي القيمة الفعلية
هدف. إليك ما سيبدو عليه أي شخص آخر إذا وجده مفيدًا.

var preStr = Handlebars.precompile ('{{foo}}') ،
var pre = (وظيفة جديدة ('return' + preStr) ()) ؛
var template = Handlebars.template (pre) ؛

يبدو أنه شيء يمكن دمجه بسهولة في المقاود.

-
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
https://github.com/wycats/handlebars.js/issues/1033#issuecomment -107249447
.

البرنامج النصي هو أداة تطوير لقوالب البريد الإلكتروني. يتم تحميل المصدر المترجم مسبقًا للاستخدام في الإنتاج ولكني أقوم أيضًا بإنشاء معاينة محلية كاملة. اخترت عدم استخدام التحويل البرمجي لأنني بهذه الطريقة يمكنني الحصول على كليهما من مصدر مشترك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات