J'ai développé un site en utilisant babel-node et navigué avec la transformation babelify, pour prendre en charge la syntaxe ES6.
Je me demande simplement, puis-je exécuter ceci en production en tant que babel-node server
plutôt que de node server
Quelles autres options dois-je exécuter ES6 dans un nœud?
Voici les commandes que je suis en cours d'exécution pour la construction et commencer dans le 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 développement
"babel": "^4.0.1", "babelify": "^5.0.3", "browserify": "^8.0.3"
Pour le code côté client , vous faites la bonne chose. babelify
le et babelify
le au client.
Pour le code côté serveur , je ferais simplement une compilation régulière en utilisant babel-cli
Selon http://babeljs.io/docs/setup/#babel_register ,
babel-register
n'est pas destiné à l'utilisation de la production – Le crochet nécessaire est principalement recommandé pour les cas simples.
Pour Babel 6+
À partir de Babel 6, aucune transformation n'est incluse par défaut. Commençons 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 de synchronisation que nous avons téléchargé ci-dessus. Jetez un oeil à la liste complète des presets pour voir lequel (s) vous convient le mieux.
{ "presets": ["es2015"] }
Ajoutez un script de build
à votre package.json
. Au-dessous de src
vos fichiers d'entrée et de build
sont les fichiers de sortie transformés
"scripts": { "build": "babel src -d build" }
Ensuite, construisez-le!
$ npm run build
Ensuite, exécutez votre code. À ce stade, vous voulez exécuter les fichiers dans votre répertoire de build
$ npm start
Pour Babel <= 5, utilisez le crochet requis.
require("babel/register");
Tous les fichiers ultérieurs requis par le nœud avec les extensions .es6 , .es , .jsx et .js seront transformés par Babel. Le polyfill est également automatiquement requis.
Vous pourrez conserver vos fichiers source dans ES6, mais les exécuter à l'aide de node server.js
Selon vos commentaires, vous semblez avoir un petit problème. Faites attention à la partie surlignée jaune ci-dessus. Votre premier fichier ne peut être que ES5, qui est exécuté par le nœud lui-même. Toutes les demandes suivantes seront transformées par Babel …
Voici à quoi ressemble 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
mets le feu!
$ node server.js
Je viens d'écrire un blog sur ce sujet
La documentation de Babeljs CLI avertit ce qui suit:
Babel-node non destiné à l'utilisation de la production
Vous ne devriez pas utiliser le babel-node en production. Il est inutilement lourd, avec une forte utilisation de la mémoire en raison du stockage du cache en mémoire. Vous recevrez également une pénalité de performance de démarrage car l'application complète doit être compilée à la volée.
Voici un exemple de la façon dont vous pouvez configurer les scripts npm pour exécuter votre application avec un noeud 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 la publication du blog
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 consommée par babel-cli
.
Le didacticiel officiel a tout ce dont vous avez besoin pour démarrer sur un nœud (pas sur le navigateur!): https://github.com/babel/example-node-server . LIS LE! J'ai trouvé tellement de tutoriels de blog trompeux qui ont utilisé autour des manières, et trouvé cet article le plus facile à suivre.
Bonus: contrairement à ce que beaucoup de gens pensent, toute la magie de transpiration 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 aucun de ses modules helper à l'échelle mondiale! Astucieux.
Il est important de peser les avantages et inconvénients de l'utilisation de babel-node en production.
babel-node
ajoute entre une demi-seconde à une seconde du 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 n'aura pas beaucoup d'importance. D'autre part,
src
/ lib
et dist
indépendants import
partir de fichiers locaux, importez-vous sur src/myutils
ou sur lib/myutils
? L'utilisation de babel-node
élimine ce problème. J'utilise uniquement Babel pour le support de modules. Maintenant, V8 vient de publier un support pour les modules le 10 janvier 2017. Espérons que nous verrons les modules supportés dans Node sous un drapeau dans quelques mois, rendant ma raison d'utiliser Babel Moot.