Para el código del lado del cliente , está haciendo lo correcto. babelify
y envíelo al cliente.
Para el código del lado del servidor , simplemente haría una compilación regular usando babel-cli
De acuerdo con http://babeljs.io/docs/setup/#babel_register , nobabel-register
está diseñado para uso en producción : el enlace require se recomienda principalmente para casos simples.
para Babel 6+
A partir de Babel 6, no se incluyen transformaciones por defecto. Así que comencemos instalando babel-cli
y babel-preset-es2015
.
$ npm install --save-dev babel-cli babel-preset-es2015
Agregue una transformación a su .babelrc
archivo: este es el módulo personalizado que descargamos anteriormente. Eche un vistazo a la lista completa de ajustes preestablecidos para ver cuáles son los más adecuados para usted.
{
"presets": ["es2015"]
}
Agregue un build
script a su package.json
. A continuación src
se muestran sus archivos de entrada y build
los archivos de salida transformados
"scripts": {
"build": "babel src -d build"
}
¡Entonces constrúyelo!
$ npm run build
Luego ejecuta tu código. En este punto, querrá ejecutar los archivos en su build
directorio
$ npm start
para Babel <= 5, solo use el gancho require.
require("babel/register");
Todos los archivos posteriores requeridos por el nodo con las extensiones .es6 , .es , .jsx y .js serán transformados por Babel. El polyfill también se requiere automáticamente.
Podrá mantener sus archivos fuente en ES6 pero aún ejecutarlos usando node server.js
Según sus comentarios, parece que tiene un pequeño problema. Preste especial atención a la parte resaltada en amarillo arriba. Su primer archivo solo puede ser ES5, que es ejecutado por el propio nodo. Todas las necesidades posteriores serán transformadas por Babel ...
Así es como podría verse una configuración típica
server.js
require("babel/register");
var app = require("./app.js");
app.js
¡préndelo!
$ node server.js
require("babel/register");
mi server.js y cuando lo ejecuto aparecenode server.js
el error:Unexpected reserved word: import ...
así que no parece funcionarAcabo de escribir una publicación de blog sobre este tema.
La documentación de la CLI de Babeljs advierte lo siguiente:
Este es un ejemplo de cómo puede configurar los scripts npm para ejecutar su aplicación con node en lugar de babel-node.
"scripts": { "clean": "rm -rf build && mkdir build", "build-css": "node-sass scss/app.scss public/css/app.css", "build-server": "babel -d ./build ./server -s", "build": "npm run clean && npm run build-css && npm run build-server", "lint": "eslint source/ --quiet", "start": "node ./build/index.js", "debug": "node --debug ./build/index.js", "test": "for i in $(ls tests/); do babel-node \"./tests/${i}\" | faucet ; done", "validate": "npm run lint; npm run test && npm outdated --depth 0" },
Puede encontrar más detalles en la publicación del blog.
fuente
Es importante sopesar los pros y los contras de usar babel-node en producción.
babel-node
agrega entre medio segundo y un segundo al costo de inicio, en hardware básico. Pero si su aplicación es un servidor de larga duración, ese costo inicial no importará mucho.Por otra parte,
src
/lib
y separadosdist
import
de archivos locales, ¿importará desdesrc/myutils
o desdelib/myutils
? El usobabel-node
elimina ese problema.Solo uso Babel para soporte de módulos. Ahora, V8 acaba de lanzar soporte para módulos el 10 de enero de 2017. Con suerte, veremos el soporte de módulos en Node bajo una bandera en unos meses, haciendo que mi razón para usar Babel sea discutible.
fuente
La respuesta de @ cuadraman es más precisa que @naomik.
Para responder brevemente a su pregunta: no,
babel-node
usted no debería invocarlo explícitamente.babel-node
es una biblioteca privada que consumebabel-cli
.El tutorial oficial tiene todo lo que necesita para comenzar a funcionar en el nodo (¡no en el lado del navegador!): Https://github.com/babel/example-node-server . LEERLO! Encontré tantos tutoriales de blogs engañosos que se usaban en varias formas, y encontré este artículo el más fácil de seguir.
Bono: contrariamente a lo que mucha gente piensa, toda la magia transpiling se puede instalar localmente (usando
npm install --save-dev babel-cli nodemon babel-preset-es2015 babel-preset-stage-2
). ¡No es necesario instalar Babel o cualquiera de sus módulos auxiliares a nivel mundial! Bastante ingenioso.fuente