Tengo una aplicación isomorfa escrita en ES6 en un cliente con Babel transpiler . Quiero que mi servidor express tenga la misma sintaxis ES6 que el código del cliente.
Desafortunadamente require('babel/register') no funciona..
require('babel/register'); // doesn't work // require('babel-core/register); doesn't work.. const env = process.env.NODE_ENV || 'development'; const port = process.env.NODE_PORT || 1995; const http = require('http'); const express = require('express'); const address = require('network-address'); let app = express(); app.set('port', port); app.use(express.static(path.join(__dirname, 'public'))); app.get('*', (req, res) => { res.send('Hello!'); }); http.createServer(app).listen(app.get('port'), function () { console.info('Demo app is listening on "%s:%s" env="%s"', address(), app.get('port'), env); });Dado que Babel 6 usa babel-register hook para realizar la transpilación sobre la marcha.
Primero:
npm install babel-registerEntonces pídelo con:
require('babel-register'); // not using // require('babel/register'); // or // require('babel-core/register); Para convertir su código Ecmascript 6 a ecmascript 5 , debe configurar la opción de Babel presets con require babel-register esta manera:
require('babel-register')({ presets: [ 'es2015' ] }); A diferencia de la respuesta de @alexander-pustovalov , no necesita un archivo .babelrc .
también debes instalar babel-preset-es2015 :
npm install babel-preset-es2015Finalmente, su archivo Server.js será:
require('babel-register')({ presets: [ 'es2015' ] }); const env = process.env.NODE_ENV || 'development'; const port = process.env.NODE_PORT || 1995; const http = require('http'); const express = require('express'); const address = require('network-address'); let app = express(); app.set('port', port); app.use(express.static(path.join(__dirname, 'public'))); app.get('*', (req, res) => { res.send('Hello!'); }); http.createServer(app).listen(app.get('port'), function () { console.info('Demo app is listening on "%s:%s" env="%s"', address(), app.get('port'), env); });require('babel/register') no transpila el archivo desde el que se llama. Si desea que server.js se incluya en la transpilación sobre la marcha, debe ejecutarlo con babel-node (el reemplazo de la CLI de Babel para node ).
Vea mi respuesta aquí para ver un ejemplo.
Me encontré con un problema similar al intentar renderizar una página de reacción (.jsx) en el servidor. Lo arreglé colocando el fragmento a continuación en la parte superior de mi archivo de servidor
require('babel-register')({ presets: ['es2015', 'react'] }); asegúrese de tener instalados npm babel-preset-es2015 y babel-preset-react