2015-06-24 10 views
5

मैं कोआ ऐप संकलित करने की कोशिश कर रहा हूं, और कोआ के पास दावा है कि यह सुनिश्चित करने के लिए जांच करें कि मैं जेनरेटर फ़ंक्शन को मिडलवेयर के रूप में पास कर रहा हूं। हालांकि, मैं फ्रंट एंड कोड के साथ स्थिरता के लिए, बेबेल का उपयोग करके ES7 से अपने सर्वर साइड कोड को संकलित करना चाहता हूं।क्या ईएस 5 के बजाय बेबेल "नोड - हार्मनी" के लिए संकलित कर सकता है?

क्या ES5 के बजाय नोड सद्भाव को लक्षित करना संभव है? मुझे विकल्पों में वादा करने वाला कुछ भी दिखाई नहीं देता है, लेकिन एक लक्ष्य चुनना एक मानक चीज जैसा लगता है जो एक कंपाइलर के साथ करने में सक्षम होता है।

अद्यतन

ब्लैकलिस्टिंग कोलाहल के regenerator transform, कोई असर नहीं है, भले ही मैं stage: 1 उपयोग कर रहा हूँ लगता है।

index.js:

require("babel/register")({ 
    sourceMaps: "inline", 
    stage: 1, 
    blacklist: [ "regenerator" ], 
    optional: [ "asyncToGenerator" ] 
}); 

var app = require("./src/server"); 

app.listen(process.env.port || 3000); 

src/server.js:

import koa from "koa"; 
import router from "koa-router"; 

router.get("/", function *(next) { 
    this.body = "Hi!"; 
}); 

let app = koa(); 
app.use(router()); 

export default app; 

निष्पादित करें: node --harmony index.js

node --version 
v0.12.4 

उत्तर

4

वहाँ नहीं वास्तव में इसे के बाद से --harmony का एक मानक परिभाषा है यह नोड या आईओजे के किस संस्करण का उपयोग करने के लिए होता है इस पर निर्भर करेगा। बेबेल के साथ आप सबसे अच्छा कर सकते हैं स्पष्ट रूप से तय करते हैं कि कौन से परिवर्तन चलाना है। बेबेल आपको whitelist और/या blacklist विकल्प प्रदान करने की अनुमति देता है उदा।

{ 
    blacklist: [ 
    'es6.classes' 
    ] 
} 

उदाहरण के लिए ईएस 6 कक्षाओं को पार करना बंद कर देगा और आपके प्लेटफ़ॉर्म पर उनका समर्थन करेगा। परिवर्तनों की मुख्य सूची here है।

'regenerator' इस मामले में पारदर्शी जनरेटर अक्षम कर देगा। यदि आप इसे अक्षम करते हैं, और आप async फ़ंक्शंस का उपयोग कर रहे हैं, तो आप optional: ['asyncToGenerator'] को एक रैपर फ़ंक्शन के साथ मानक जेनरेटर में एसिंक फ़ंक्शन के रूपांतरण को सक्षम करने के लिए पास करना चाहते हैं, क्योंकि वे अन्यथा अंतिम आउटपुट में समाप्त होते हैं।

+0

ब्लैकलिस्टिंग रीजेनरेटर कोई प्रभाव नहीं पड़ा है, भले ही मैं 'मंच: 1' का उपयोग कर रहा हूँ। अजीब बात यह है कि अगर मैं इंजेक्टर की आवश्यकता के बजाय सीएलआई से बैबेल चलाता हूं, तो मुझे लगता है कि बेबेल केवल मेरे स्रोत को संकलित कर रहा है, कोआ या किसी अन्य नोड_मोड्यूल नहीं। यह अच्छा है, उन मॉड्यूल में उनके जेनरेटर बरकरार रहना चाहिए, लेकिन जब मैं संकलित संस्करण चलाता हूं, तब भी मुझे वही दावा त्रुटि मिलती है। –

+0

दिमाग अगर मैं पूछता हूं कि आप क्या कहते हैं इसका कोई प्रभाव नहीं पड़ता है? आप वास्तव में कैसे परीक्षण कर रहे हैं कि यह एक वास्तविक जनरेटर के रूप में लोड किया गया है जो एक पारदर्शी बनाम है? आपने जो दावा किया है उसका क्या अर्थ है? – loganfsmyth

+0

मैं पूछता हूं क्योंकि जहां तक ​​मुझे पता है, 'पुनर्विक्रेता'-पारदर्शी जेनरेटर को अभी भी कोआ में 'जेनरेटर फ़ंक्शन' == fn.constructor.name' चेक पास करनी चाहिए। – loganfsmyth

1

अजीब यह है

babel-node --blacklist regenerator --harmony server.js 

server.js के लिए कोड (server.js में मामूली परिवर्तन के साथ) CLI से काम कर रहा है:,

import koa from "koa"; 
import router from "koa-router"; 

const Router = router(); 

Router.get("/", function *(next) { 
    this.body = "Hi foo!"; 
}); 

let app = koa(); 
app.use(Router.routes()); 

export default app; 
+0

'app.use (राउटर.राउट्स)); '- वास्तव में यह है कि मैं अब मार्गों को कैसे बढ़ा रहा हूं। ऐसा लगता है कि कोआ-राउटर को अपडेट किया गया था। –

संबंधित मुद्दे