J'ai développé un site utilisant babel-node et browserify avec la transformation babelify, afin de prendre en charge la syntaxe ES6.
Je me demande juste, puis-je utiliser ceci en production en tant que babel-node server
plutôt que node server
Quelles autres options dois-je utiliser pour exécuter ES6 dans le noeud?
Voici les commandes que je lance pour la construction et commence en développement
// npm run build
browserify -t [babelify] client.js > public/js/bundle.js",
// npm start
babel-node server.js"
Voici mes dépendances de dev
"babel": "^4.0.1",
"babelify": "^5.0.3",
"browserify": "^8.0.3"
Pour le code côté client , vous faites la bonne chose. babelify
et l'envoyer au client.
Pour le code côté serveur , je voudrais juste faire une construction régulière en utilisant babel-cli
Selon http://babeljs.io/docs/setup/#babel_register ,
babel-register
n'est pas destiné à une utilisation en production - Le crochet requis est principalement recommandé pour les cas simples.
pour Babel 6+
A partir de Babel 6, aucune transformation n'est incluse par défaut. Commençons donc par installer babel-cli
et babel-preset-es2015
.
$ npm install --save-dev babel-cli babel-preset-es2015
Ajoutez une transformation à votre fichier .babelrc
- il s’agit du module perst que nous avons téléchargé ci-dessus. Jetez un coup d’œil sur le liste complète des préréglages pour voir lequel vous convient le mieux.
{
"presets": ["es2015"]
}
Ajoutez un script build
à votre package.json
. Ci-dessous src
sont vos fichiers d'entrée et build
sont les fichiers de sortie transformés.
"scripts": {
"build": "babel src -d build"
}
Alors construis-le!
$ npm run build
Ensuite, lancez votre code. À ce stade, vous voudrez exécuter les fichiers de votre répertoire build
$ npm start
pour Babel <= 5, utilisez simplement le crochet require.
require("babel/register");
Tous les fichiers suivants requis par le noeud avec les extensions . Es6 , . Es , . jsx et . js sera transformé par Babel. Le polyfill est également requis automatiquement.
Vous pourrez conserver vos fichiers source dans ES6 tout en les exécutant avec node server.js
Selon vos commentaires, vous semblez avoir un petit problème. Portez une attention particulière à la partie en surbrillance jaune ci-dessus. Votre premier fichier ne peut être que ES5, qui est exécuté par le noeud lui-même. Tous nécessitent par la suite seront transformés par Babel ...
Voici à quoi pourrait ressembler une configuration typique
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
Lancez-le!
$ node server.js
Je viens d'écrire n article de blog sur ce sujet
documentation CLI de Babeljs met en garde contre les éléments suivants:
babel-node n'est pas destiné à une utilisation en production
Vous ne devriez pas utiliser babel-node en production. Il est inutilement lourd, avec une utilisation importante de la mémoire en raison du stockage en mémoire cache du cache. Vous serez également toujours pénalisé par les performances de démarrage car l’application entière doit être compilée à la volée.
Voici un exemple de la manière dont vous pourriez configurer les scripts npm pour exécuter votre application avec node au lieu 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"
},
Vous pouvez trouver plus de détails sur le blog post
Il est important de peser le pour et le contre de l'utilisation de babel-node en production.
babel-node
ajoute une demi-seconde à une seconde au coût de démarrage, sur le matériel de base. Mais si votre application est un serveur de longue durée, ce coût de démarrage importera peu.D'autre part,
src
/lib
et dist
distincts.import
à partir de fichiers locaux, importerez-vous à partir de src/myutils
ou de lib/myutils
? Utiliser babel-node
élimine ce problème.J'utilise uniquement Babel pour le support des modules. V8 vient tout juste de sortir support pour les modules le 10 janvier 2017. Espérons que nous verrons le support des modules dans Node sous un drapeau dans quelques mois, ce qui rendra ma raison d'utiliser Babel moot .
La réponse de @ cuadraman est plus précise que @naomik.
Pour répondre brièvement à votre question: non, babel-node
ne doit pas être invoqué explicitement par vous. babel-node
est une bibliothèque privée utilisée par babel-cli
.
Le didacticiel officiel contient tout ce dont vous avez besoin pour utiliser un nœud (pas du côté du navigateur!): https://github.com/babel/example-node-server . LIS LE! J'ai trouvé tellement de tutoriels de blogues trompeurs qui utilisaient différentes méthodes, et j'ai trouvé cet article le plus facile à suivre.
Bonus: contrairement à ce que beaucoup de gens pensent, toute la magie de la transcription peut être installée localement (en utilisant npm install --save-dev babel-cli nodemon babel-preset-es2015 babel-preset-stage-2
). Pas besoin d'installer Babel ou l'un de ses modules d'assistance dans le monde entier! Assez chouette.