Frage Ist es in Ordnung, babel-node in der Produktion zu verwenden?


Ich habe eine Seite mit babel-node entwickelt und browserisiert mit der babelify-Transformation, um die ES6-Syntax zu unterstützen.

Ich frage mich nur, kann ich das in der Produktion als laufen lassen  babel-node server  eher, als  node server   Welche anderen Optionen muss ich ES6 in Knoten ausführen?

Hier sind die Befehle, die ich zum Build ausführen und in der Entwicklung starten

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

// npm start
babel-node server.js"

Hier sind meine Dev-Abhängigkeiten

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

75
2018-06-11 06:59


Ursprung


Antworten:


Für den clientseitigen CodeDu machst das Richtige. babelify es und versenden es an den Kunden.


Für den serverseitigen Code, Würde ich nur einen normalen Build verwenden Babel-Cli

Gemäß http://babeljs.io/docs/setup/#babel_register, babel-register ist nicht für den Produktionseinsatz gedacht - Der require-Haken wird in erster Linie für einfache Fälle empfohlen.

für Babel 6+

Ab Babel 6 sind standardmäßig keine Transformationen enthalten. Beginnen wir also mit der Installation babel-cli und babel-preset-es2015.

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

Fügen Sie eine Transformation zu Ihrer hinzu .babelrc Datei - Dies ist das Perst-Modul, das wir oben heruntergeladen haben. Sieh dir das an vollständige Liste der Voreinstellungen um zu sehen, welche (n) am besten zu dir passen.

{
  "presets": ["es2015"]
}

Füge hinzu ein build Skript zu Ihrem package.json. Unten src ist Ihre Eingabedateien und build ist die transformierte Ausgabedatei

"scripts": {
  "build": "babel src -d build"
}

Dann baue es!

$ npm run build

Dann führe deinen Code aus. An diesem Punkt möchten Sie die Dateien in Ihrem ausführen build Verzeichnis

$ npm start

Für Babel <= 5 verwenden Sie einfach den require-Haken.

require("babel/register");

Alle weiteren Dateien, die von Knoten mit den Erweiterungen benötigt werden .es6, .es, .jsx und .js wird von Babel verwandelt werden. Das Polyfill wird auch automatisch benötigt.

Sie können Ihre Quelldateien in ES6 behalten, aber sie trotzdem mit ausführen node server.js


Ihren Kommentaren zufolge scheinen Sie ein paar Probleme zu haben. Achten Sie besonders auf den gelb markierten Teil oben. Ihre erste Datei kann nur ES5 sein, das vom Knoten selbst ausgeführt wird. Alle später erfordert wird von Babel verwandelt werden ...

So könnte ein typisches Setup aussehen

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

feuern Sie es an!

$ node server.js

102
2018-06-11 07:00



Ich habe gerade geschrieben ein Blogbeitrag zu diesem Thema 

Babeljs CLI-Dokumentation warnt folgendes:

Babel-Node nicht für den Produktionseinsatz gedacht

Sie sollten nicht Babel-Knoten in der Produktion verwenden. Es ist unnötig   schwer, mit hohem Speicherverbrauch, da der Cache im Speicher abgelegt ist.   Sie werden auch immer eine Startleistung Strafe als die   Die gesamte App muss im laufenden Betrieb kompiliert werden.

Dies ist ein Beispiel dafür, wie Sie die npm-Skripts so einrichten können, dass Ihre App mit Knoten statt mit babel-node ausgeführt wird.

"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"
},

Sie können mehr Details auf der finden Blogeintrag


52
2017-10-04 02:56



Es ist wichtig, die Vor- und Nachteile der Verwendung von Babel-Node in der Produktion abzuwägen.

  • babel-node Fügt zwischen einer halben Sekunde und einer Sekunde zu den Startkosten auf Standardhardware hinzu. Wenn Ihre App jedoch ein Server mit langer Laufzeit ist, spielen diese Startkosten keine Rolle.
  • Versuchen Sie, den zusätzlichen Speicherverbrauch zu messen. Für meine App zum Beispiel (Lesen und Bearbeiten von Zeitreihendaten) waren es nur 20 MB. Abhängig von Ihrer Situation kann dies bedeutsam sein oder auch nicht.

Andererseits,

  • Die Verwendung von babel-node vereinfacht die Entwicklung direkt - Sie werden keine "Build" -Skripte benötigen, und Sie müssen nicht separat sein src/lib und dist Verzeichnisse
  • wenn du import aus lokalen Dateien, importieren Sie von src/myutilsoder von lib/myutils? Verwenden babel-node beseitigt dieses Problem.

Ich verwende Babel nur für die Modulunterstützung. Jetzt ist V8 gerade erschienen Unterstützung für Module am 10. Januar 2017. Hoffentlich sehen wir in einigen Monaten die Unterstützung von Modulen in Node unter einer Flagge, was meinen Grund für die Verwendung von Babel moot darstellt.


11
2018-01-15 23:50



@ Cuadramans Antwort ist genauer als @NAOMIK.

Um deine Frage kurz zu beantworten: nein, babel-node sollte nicht explizit von Ihnen aufgerufen werden. babel-node ist eine private Bibliothek, die verbraucht wird babel-cli.

Das offizielle Tutorial enthält alles, was Sie brauchen, um auf Knoten (und nicht auf der Browser-Seite!) Zu laufen: https://github.com/babel/example-node-server. LIES ES! Ich habe so viele irreführende Blog-Tutorials gefunden, bei denen es um die Wege ging, und fand diesen Artikel am einfachsten zu folgen.

Bonus: Im Gegensatz zu dem, was viele Leute denken, kann die gesamte transpilierende Magie lokal installiert werden npm install --save-dev babel-cli nodemon babel-preset-es2015 babel-preset-stage-2). Keine Notwendigkeit, Babel oder eines seiner Hilfsmodule global zu installieren! Ziemlich schick.


8
2018-03-11 22:31