2012-02-07 10 views
10

मैं एम्बरजे का बहुत आनंद ले रहा हूं और अपने निर्माण प्रक्रिया के हिस्से के रूप में अपने कुछ छोटे, मोबाइल ऐप्स में अगली कदम लेना चाहता हूं और अपने एम्बर/हैंडलबार्स टेम्पलेट्स को प्रीकंपाइल करना चाहता हूं।नोडजेस के साथ एम्बरजे हैंडलबार टेम्पलेट्स को प्रीकंपाइल करने का आसान तरीका?

मैं रूबी के साथ गड़बड़ से दूर रहना पसंद करूंगा और node.js का उपयोग करना चाहता हूं क्योंकि मैं इसका उपयोग करने में अधिक सहज हूं।

मुझे विश्वास है कि मैं जो उपयोग करना चाहता हूं वह एम्बर है। हैंडलबर्स.प्रोम्पाइल, लेकिन दुर्भाग्य से मैं नोड वातावरण में कैननिकल ember.js फ़ाइल लोड करने में असमर्थ हूं। नोड repl से एक अनुभवहीन प्रयास का उदाहरण:

> var e = require('./ember'); 
ReferenceError: window is not defined 
    at /Users/jeremyosborne/git/projects/ldls/client/lib/emberjs/src/ember.js:5:1 
    at Object.<anonymous> (/Users/jeremyosborne/git/projects/ldls/client/lib/emberjs/src/ember.js:1596:2) 
    --- stack trace, you get the idea --- 

मुझे लगता है कि मैं पहले से ही समझ गए होंगे उन्हें अपने कोड में सेटअप करने का तरीका इतना है कि वे मेरे विचारों के साथ सही ढंग से काम करते हैं, मैं सिर्फ उन्हें एक में संकलित करने के लिए चाहते हैं एक ब्राउज़र डोम के बाहर पर्यावरण।

नोड में लोड करने के लिए कैनोलिक ember.js प्राप्त करने के बदले, क्या फाइलों का एक विशिष्ट सेट है जिसे मैं एम्बर रेपो से निकाल सकता हूं और अपने टेम्पलेट को संकलित करने के लिए उपयोग कर सकता हूं?

संपादित करें मैंने एक ब्लूज फिक्स किया जो महान काम करता है लेकिन रखरखाव के लिए एफ प्राप्त करता है। मैंने सभी Handlebars कोड को window ऑब्जेक्ट के संदर्भ में घटा दिया। इसके बाद मैंने Ember.Handlebars.Compiler कोड के साथ Ember.create को Object.create के साथ बदलकर ऑब्जेक्ट का निर्यात किया, और व्हायोला चीजें नोड में प्रतीत होती है (जैसा कि इसमें काम करता है और उत्पादित फ़ंक्शंस टेम्पलेट्स होते हैं)। लेकिन मैं उपर्युक्त रखरखाव के कारण अपने स्वयं के प्रश्न का उत्तर नहीं मानता, इसलिए अभी भी उत्तर के लिए खुला है।

EDIT 2 उपरोक्त कुल विफल होने के लिए बाहर निकलता है। शायद प्रक्रिया में कुछ गड़बड़ है, लेकिन Ember.Handlebars.precompile या Ember.Handlebars.compile का उपयोग नहीं कर रहा है। टेम्पलेट्स बनते हैं, लेकिन जब मैं अपने कोड में Ember.TEMPLATES से जुड़े precompiled टेम्पलेट का उपयोग करता हूं, तो वे काम नहीं करते हैं। मैं केवल emberjs.com साइट पर सुझाए गए संशोधित स्क्रिप्ट टैग में स्पष्ट रूप से पारित होने पर टेम्पलेट्स को काम करने में सक्षम होने लगता हूं।

संपादित करें 3 मुझे पता चला कि मैं क्या गलत कर रहा था। मेरा जवाब नीचे है।

उत्तर

4

मिले मेरी समस्या के लिए एक अच्छा पर्याप्त समाधान आसान बनाए रखने के लिए है कि मैं विचार करेंगे मेरी समस्या हल करने के लिए पर्याप्त लगता है कि पर एक नजर डालें।

  • ले लो कोड की न्यूनतम राशि मैं एंबर टेम्पलेट्स precompile की जरूरत है:

    यहाँ कैसे मैं चीजों को हल है।

    • एम्बर हैंडलबार्स की सामग्री को एक फ़ाइल में कॉपी करें। यह फ़ाइल एम्बरजे रेपो में स्थित है: https://github.com/emberjs/ember.js/blob/master/packages/handlebars/lib/main.js
    • कोड के भीतर, window.Handlebars = Handlebars; का एक उदाहरण ढूंढें और इसे हटा दें।
    • एम्बर टेम्पलेट कंपाइलर और हैंडलबार ओवरराइड की सामग्री संलग्न करें। फ़ाइल एम्बरजे रेपो में स्थित है: https://github.com/emberjs/ember.js/blob/master/packages/ember-handlebars/lib/ext.js
    • Ember.create के सभी उदाहरण खोजें और Object.create पर बदलें।
  • सरल precompile प्रक्रिया की रूपरेखा:
    • लोड एक var Ember = require('./my_ember_precompiler').Ember साथ कोड।
    • अपने टेम्पलेट्स स्ट्रिंग के रूप में प्राप्त करें और उन्हें से संकलित करें।
    • यह ऐप से ऐप से अलग होगा, लेकिन एम्बर को प्रीकंपिल्ड टेम्पलेट्स के पंजीकरण की आवश्यकता होती है। लोड करने के बाद, प्रत्येक बनाए गए टेम्पलेट के लिए, हमें अपने टेम्पलेट्स को पंजीकृत करने की आवश्यकता है। मूल रूप से Handlebars.template() पर कॉल में टेम्पलेट स्ट्रिंग को लपेटें और सुनिश्चित करें कि यह लपेटा गया फ़ंक्शन Ember.TEMPLATES ऑब्जेक्ट में जोड़ा गया है।

ऊपर दर्दरहित जब यह एक स्क्रिप्ट में स्वचालित है है।

3

NPM पैकेज Ember-Runner

+0

मैं वास्तव में कैसे एंबर-धावक काम करने के लिए लग रहा है और शायद यह की दिशा में खिंचने की तरह। हालांकि, अभी के लिए, मेरे पास अपनी खुद की कठोर निर्माण प्रक्रिया है और मैं सरल (ए) एम्बर टेम्पलेट्स ले रहा हूं, (बी) नोडजेज़ का उपयोग करके एम्बर टेम्पलेट संकलित करें। ऐसा लगता है कि यह वास्तव में आसान होना चाहिए, लेकिन मैं सबकुछ हाथ से नहीं बनाना चाहता, न ही मैं अपनी बिल्ड प्रक्रिया को बदलना चाहता हूं। इसके अलावा, मुझे jsdom पसंद है, लेकिन मुझे इसका उपयोग करके लंगड़ा लगता है, इसलिए मैं jquery लोड कर सकता हूं, और फिर एम्बर लोड कर सकता हूं, और उसके बाद एक डोम रखने का नाटक कर सकता हूं, इसलिए मैं शुद्ध जावास्क्रिप्ट प्रोसेसिंग कर सकता हूं। ओह। – jeremyosborne

+0

एम्बर-रनर एम्बर टेम्पलेट्स संकलित करता है। मैं इसके स्रोत से परिचित नहीं हूं इसलिए मैं आपको कोड की विशिष्ट पंक्तियों पर इंगित करने में असमर्थ हूं। मैं सहमत हूं कि इसे लागू करने में बहुत मुश्किल नहीं होनी चाहिए। –

1

निम्नलिखित सार एक NodeJS निर्माण स्क्रिप्ट है कि सभी .handlebars किसी दिए गए फ़ोल्डर में फ़ाइलें precompile जाएगा शामिल हैं: https://github.com/emberjs/ember-rails

पर आधिकारिक एंबर-रेल मणि के लिए कोड में

https://gist.github.com/1622236

0

देखो हालांकि यह node.js प्रोजेक्ट नहीं है, यह आपको दिखाता है कि रेल 3.1+ एसेट पाइपलाइन का उपयोग करके टेम्पलेट्स को प्रीकंपाइल कैसे करें, और इसमें सभी आवश्यक जावास्क्रिप्ट कोड शामिल हैं जिन्हें आपको समाधान के साथ हैक किए बिना नोड में ऐसा करने की आवश्यकता होगी कि आपको अपने आप को बनाए रखना होगा।

अधिक विशेष रूप से, विक्रेता/आस्तियों/javascripts/एंबर-precompiler.js और lib/एंबर-रेल को देखो/hjs_template.rb

मैं नोड (जाहिर है पर एक विशेषज्ञ से दूर हूँ, रेल है और मेरे बात) .. लेकिन मुझे लगता है कि उन दो फाइलों को आपको सही दिशा में इंगित करना चाहिए। असल में, आप ember-precompiler.js को जोड़ना चाहते हैं (जो एक बेहतर शब्द की कमी के लिए "शिम" के रूप में कार्य करता है) ember.js के साथ और फिर अपने टेम्पलेट को संकलित करने के लिए EmberRails.precompile को कॉल करें।

+0

ऐसा लगता है कि गस्ट गर्थ पोस्ट मूल रूप से एम्बर-प्रीकंपेलर.जेएस की तरह ही काम करता है, मैंने यह सुनिश्चित करने के लिए इसका परीक्षण नहीं किया है कि यह काम करता है, लेकिन उसके उत्तर और मेरे बीच में आप कुछ और अधिक काम करने योग्य और रखरखाव योग्य। – stevenh512

6

मैंने grunt-ember-handlebars नामक एक गंदे प्लगइन लिखा है जो वास्तव में ऐसा करता है। यह एक महत्वपूर्ण अंतर के साथ गर्थ की लिपि की नकल करता है:

यह lib/headless-ember.js और lib/ember.js का उपयोग करता है, जो ember.js द्वारा precompile default templates पर बनाए रखा जाता है (कम से कम अब तक)। यदि आप गंदगी का उपयोग नहीं करना चाहते हैं, तो आप कार्यों/ember-handlebars.js में precompile_handlebars सहायक से प्रासंगिक कोड निकाल सकते हैं।

+0

यह अब तक का सबसे सुंदर समाधान है। इससे पहले मैंने कभी कड़वाहट का उपयोग नहीं किया है। इसे पेश करने के लिए धन्यवाद और इस शानदार प्लगइन को लिखने के लिए धन्यवाद। –

+0

डेनिस ने क्या कहा – the0ther

5

मेरे पास published a version of ember-precompilerhandlebars कमांड लाइन उपयोगिता के समान इंटरफेस के साथ published a version of ember-precompiler है। आप इसे NPM से स्थापित कर सकते हैं:

npm install -g ember-precompile 

और उसके बाद के रूप में चलाते:

ember-precompile template... [-f OUTPUT_FILE] 

यह अनिवार्य करता है कि तुम क्या वर्णन (और क्या सार संस्करण करते भी): बाहर नकली लापता करने के लिए आवश्यक घटकों एम्बर और हैंडलबार्स चलाएं, टेम्पलेट संकलित करें और उन्हें Ember.TEMPLATES पर जोड़ें।

0

विंडो ऑब्जेक्ट jsdom

var jsdom = require("jsdom").jsdom; 
    global.document = jsdom("<html><head></head><body></body></html>"); 
    global.window = document.createWindow(); 
    global.$ = global.jQuery = window.$ = window.jQuery = require("jquery"); 
    global.Handlebars = window.Handlebars = require('handlebars'); 
    global.Application = window.Application = {}; 
    require('ember.js'); 

द्वारा मज़ाक उड़ाया जा सकता है और अब आप सहित Ember.Handlebars.compile

1

मैं किसी और को इस w करना चाहते हो सकता है, जो के लिए एक आधिकारिक precompiler NPM मॉड्यूल लिखा एंबर से कुछ भी चला सकते हैं/

https://npmjs.org/package/ember-template-compiler

यह आसान है ember.js का नवीनतम संस्करण को स्थापित करने और उपयोग करने के लिए (exa mple नीचे)

NPM स्थापित एंबर-टेम्पलेट संकलक

var compiler = require('ember-template-compiler'); 
var template = fs.readFileSync('foo.handlebars').toString(); 
var input = compiler.precompile(template).toString(); 
var output = "Ember.TEMPLATES['foo'] = Ember.Handlebars.template(" + input + ");"; 
संबंधित मुद्दे