2015-06-24 10 views
5

Sto provando a compilare un'app Koa e Koa ha asserzioni che controllano che io stia passando le funzioni del generatore come middleware. Tuttavia, vorrei compilare il mio codice lato server da ES7 usando Babel, per coerenza con il front-end.Babel può compilare "node - harmony" invece di ES5?

È possibile scegliere come target l'armonia del nodo invece di ES5? Non vedo nulla di promettente nelle opzioni, ma scegliere un target sembra una cosa standard da poter fare con un compilatore. di

aggiornamento

Blacklisting Babel regenerator transform sembra non avere alcun effetto, anche se sto usando 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; 

Execute: node --harmony index.js

node --version 
v0.12.4 

risposta

4

In realtà non è una definizione standard di --harmony dal momento che dipenderebbe dalla versione di Node o iojs che stai usando. Il meglio che puoi fare con Babel è decidere esplicitamente quali sono le trasformazioni da eseguire. Babel ti consente di fornire un'opzione whitelist e/o blacklist ad es.

{ 
    blacklist: [ 
    'es6.classes' 
    ] 
} 

per esempio smetterebbe di transponderare le classi ES6 e fare affidamento sulla piattaforma che le supporta. L'elenco principale di trasformazioni è here.

'regenerator' in questo caso disabilita la trasmissione di generatori. Se si disabilita tale funzione e si utilizzano le funzioni asincrone, è necessario passare quindi a optional: ['asyncToGenerator'] per abilitare la trasformazione delle funzioni asincrone in generatori standard con una funzione wrapper, poiché altrimenti finirebbero nell'output finale.

+0

rigeneratore Blacklisting ha avuto alcun effetto, anche se ho sto usando 'stage: 1'. La cosa strana è che se eseguo Babel da CLI invece di usare l'injector richiesto, vedo che Babel sta solo compilando la mia fonte, non Koa o altri node_modules. Questo è buono, quei moduli dovrebbero avere i loro generatori intatti, ma quando eseguo la versione compilata, ottengo ancora lo stesso errore di asserzione. –

+0

Ti dispiace se ti chiedo cosa ti fa dire che non ha alcun effetto? Come stai effettivamente testando se è stato caricato come generatore reale o transpiled? Qual è l'affermazione che hai menzionato? – loganfsmyth

+0

Chiedo perché, per quanto ne so, i generatori transpiled 'rigeneratori 'dovrebbero ancora passare il controllo'' GeneratorFunction '== fn.constructor.name' in Koa. – loganfsmyth

1

Strano è sembra funzionare dalla CLI (con lievi modifiche in server.js)

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

Codice per server.js:

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 (Router.routes()); '- Questo è in realtà il modo in cui sto montando le route. Sembra che ci sia stato un aggiornamento di koa-router. –

Problemi correlati