Pertanyaan Apakah boleh menggunakan babel-node dalam produksi


Saya telah mengembangkan situs menggunakan babel-node dan browserify dengan transformasi babelify, untuk mendukung sintaks ES6.

Saya hanya ingin tahu, bisakah saya menjalankan ini dalam produksi sebagai  babel-node server  daripada  node server   Apa opsi lain yang harus saya jalankan ES6 di node?

Berikut adalah perintah yang saya jalankan untuk membangun dan memulai pengembangan

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

// npm start
babel-node server.js"

Berikut adalah dependensi dev saya

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

75
2018-06-11 06:59


asal


Jawaban:


Untuk kode sisi klien, Anda melakukan hal yang benar. babelify dan kirimkan ke klien.


Untuk kode sisi server, Saya hanya akan menggunakan build biasa babel-cli

Menurut http://babeljs.io/docs/setup/#babel_register, babel-register aku s tidak dimaksudkan untuk penggunaan produksi - Hook yang diperlukan terutama direkomendasikan untuk kasus-kasus sederhana.

untuk Babel 6+

Mulai Babel 6, tidak ada transformasi yang disertakan secara default. Jadi mari kita mulai dengan menginstal babel-cli dan babel-preset-es2015.

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

Tambahkan transformasi ke Anda .babelrc file - ini adalah modul perst yang kami unduh di atas. Lihatlah di daftar lengkap preset untuk melihat mana yang paling cocok untuk Anda.

{
  "presets": ["es2015"]
}

Tambah sebuah build skrip untuk Anda package.json. Di bawah src adalah file input Anda dan build adalah file output yang diubah

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

Kemudian bangun!

$ npm run build

Kemudian jalankan kode Anda. Pada titik ini, Anda akan ingin mengeksekusi file di komputer Anda build direktori

$ npm start

untuk Babel <= 5, cukup gunakan hook yang membutuhkan.

require("babel/register");

Semua file berikutnya yang diperlukan oleh node dengan ekstensi .es6, .es, .jsx dan .js akan diubah oleh Babel. Itu polyfill juga secara otomatis diperlukan.

Anda akan dapat menyimpan file sumber Anda di ES6 tetapi tetap mengeksekusinya node server.js


Menurut komentar Anda, Anda tampaknya mengalami sedikit kesulitan. Berikan perhatian khusus pada bagian yang disorot kuning di atas. File pertama Anda hanya dapat ES5, yang dijalankan oleh node itu sendiri. Semua selanjutnya membutuhkan akan diubah oleh Babel ...

Seperti inilah tampilan pengaturan tipikal

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

nyalakan!

$ node server.js

102
2018-06-11 07:00



Saya baru saja menulis sebuah posting blog tentang topik ini 

Dokumentasi CLI Babeljs memperingatkan hal berikut:

babel-node tidak dimaksudkan untuk penggunaan produksi

Anda seharusnya tidak menggunakan babel-node dalam produksi. Itu tidak perlu   berat, dengan penggunaan memori tinggi karena cache disimpan dalam memori.   Anda juga akan selalu mengalami hukuman kinerja startup sebagai   seluruh aplikasi harus dikompilasi dengan cepat.

Ini adalah contoh bagaimana Anda dapat mengatur skrip NPM untuk menjalankan aplikasi Anda dengan simpul, bukan 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"
},

Anda dapat menemukan detail lebih lanjut di posting blog


52
2017-10-04 02:56



Sangat penting untuk mempertimbangkan pro dan kontra menggunakan babel-node dalam produksi.

  • babel-node menambahkan antara setengah detik hingga satu detik ke biaya startup, pada perangkat keras komoditas. Tetapi jika aplikasi Anda adalah server yang berjalan lama, maka biaya startup tidak akan banyak berpengaruh.
  • Cobalah untuk mengukur konsumsi memori tambahan. Untuk aplikasi saya misalnya (membaca dan memproses data seri waktu), itu hanya 20MB. Bergantung pada situasi Anda, ini mungkin atau mungkin tidak signifikan.

Di samping itu,

  • menggunakan babel-node secara langsung menyederhanakan pengembangan - Anda tidak perlu skrip "build", dan Anda tidak akan memiliki terpisah src/lib dan dist direktori
  • jika kamu import dari file lokal, akan Anda impor dari src/myutils, atau dari lib/myutils? Menggunakan babel-node menghilangkan masalah itu.

Saya hanya menggunakan Babel untuk dukungan modul. Sekarang V8 baru saja dirilis dukungan untuk modul pada 10 Januari 2017. Semoga kita akan melihat dukungan modul di Node di bawah bendera dalam beberapa bulan, memberikan alasan saya untuk menggunakan Babel diperdebatkan.


11
2018-01-15 23:50



Jawaban @cuadraman lebih akurat daripada @naomik.

Untuk menjawab pertanyaan Anda secara singkat: tidak, babel-node tidak boleh dipanggil secara eksplisit oleh Anda. babel-node adalah perpustakaan pribadi yang dikonsumsi oleh babel-cli.

Tutorial resmi memiliki semua yang Anda butuhkan untuk bangun dan berjalan di node (bukan sisi-browser!): https://github.com/babel/example-node-server. MEMBACANYA! Saya menemukan begitu banyak tutorial blog yang menyesatkan yang menggunakan berbagai cara, dan menemukan artikel ini yang paling mudah diikuti.

Bonus: bertentangan dengan apa yang dipikirkan banyak orang, semua sihir transpiling dapat diinstal secara lokal (menggunakan npm install --save-dev babel-cli nodemon babel-preset-es2015 babel-preset-stage-2). Tidak perlu menginstal Babel atau modul helpernya secara global! Cukup bagus.


8
2018-03-11 22:31