tutorial standalone register babelify javascript node.js browserify babeljs

javascript - standalone - babelify



¿Está bien usar babel-node en producción? (4)

He estado desarrollando un sitio usando babel-node y browserify con la transformación babelify, para soportar la sintaxis de ES6.

Me pregunto, ¿puedo ejecutar esto en producción como babel-node server lugar de node server ¿Qué otras opciones tengo para ejecutar ES6 en el nodo?

Aquí están los comandos que estoy ejecutando para compilar y comenzar en desarrollo

// npm run build browserify -t [babelify] client.js > public/js/bundle.js", // npm start babel-node server.js"

Aquí están mis dependencias de desarrollo

"babel": "^4.0.1", "babelify": "^5.0.3", "browserify": "^8.0.3"


Acabo de escribir una publicación de blog sobre este tema

La documentación de la CLI de Babeljs advierte lo siguiente:

babel-node no destinado para uso en producción

No debe usar babel-node en producción. Es innecesariamente pesado, con un alto uso de memoria debido a que el caché se almacena en la memoria. También siempre experimentará una penalización de rendimiento de inicio ya que toda la aplicación debe compilarse sobre la marcha.

Este es un ejemplo de cómo podría 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" },

Puedes encontrar más detalles en la publicación del blog


Es importante sopesar los pros y los contras del uso de babel-node en la 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 de inicio no importará mucho.
  • Intenta medir el consumo de memoria adicional. Para mi aplicación, por ejemplo (leer y procesar datos de series de tiempo), solo tenía 20 MB. Dependiendo de su situación, esto puede o no ser significativo.

Por otra parte,

  • el uso de babel-node simplifica directamente el desarrollo: no necesitará scripts de "compilación" y no tendrá directorios src / lib y dist separados
  • si import desde archivos locales, ¿importará desde src/myutils o desde lib/myutils ? Usar babel-node elimina ese problema.

Solo uso Babel para el soporte de módulos. Ahora V8 acaba de lanzar soporte para módulos el 10 de enero de 2017. Esperemos ver soporte de módulos en Node bajo una bandera en unos pocos meses, lo que hace que mi razón para usar Babel sea discutible.


La respuesta de @ cuadraman es más precisa que @naomik.

Para responder brevemente a su pregunta: no, usted no debe invocar explícitamente el babel-node . babel-node es una biblioteca privada que es consumida por babel-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 . LEER Encontré tantos tutoriales de blog engañosos que se usaban en varias formas, y este artículo me pareció el más fácil de seguir.

Bonificación: al contrario de 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 ni ninguno de sus módulos auxiliares a nivel mundial! Bastante ingenioso


Para el código del lado del cliente , estás haciendo lo correcto. babelify y babelify 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 , babel-register no está diseñado para uso en producción : el gancho require se recomienda principalmente para casos simples.

para Babel 6+

A partir de Babel 6, no se incluyen transformaciones por defecto. Comencemos instalando babel-cli y babel-preset-es2015 .

$ npm install --save-dev babel-cli babel-preset-es2015

Agregue una transformación a su archivo .babelrc : este es el módulo perst que hemos descargado 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 script de build a su package.json . Debajo de src están sus archivos de entrada y build son 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 directorio de build

$ npm start

para Babel <= 5, solo use el gancho require.

require("babel/register");

Babel transformará todos los archivos posteriores requeridos por el nodo con las extensiones .es6 , .es , .jsx y .js . El polyfill también se requiere automáticamente.

Podrá mantener sus archivos fuente en ES6 pero aún así ejecutarlos usando el node server.js

Según sus comentarios, parece estar teniendo un pequeño problema. Presta especial atención a la parte amarilla resaltada arriba. Su primer archivo solo puede ser ES5, que es ejecutado por el propio nodo. Todos los requisitos posteriores serán transformados por Babel ...

Así es como se vería una configuración típica

server.js

// only ES5 is allowed in this file require("babel/register"); // other babel configuration, if necessary // load your app var app = require("./app.js");

app.js

// this file will be loaded through babel // you can now use ES6 here and in every other include

¡préndelo!

$ node server.js