Он не должен использовать babel-node
в производстве в соответствии с официальным документом babel. Некоторые сказали, что вы можете использовать babel/register
вместо babel-node
, если вы не хотите скомпилировать свой ES6-код в ES5 перед запуском. Но не использует babel-node
babel/register
внутренне? В чем разница между babel-node
и require('babel/register');
. Можно ли использовать require('babel/register');
в производстве?
Можно ли использовать `require ('babel/register),` in production
Ответ 1
Babel Handbook (связанный с babeljs.io) говорит, что плохая практика использовать babel-register
в производстве (см. руководство пользователя babel-register):
Обратите внимание, что это не предназначено для использования в производстве. Он считал, что неправильная практика заключается в развертывании кода, который компилируется таким образом. Перед развертыванием гораздо лучше компилировать. Однако это работает достаточно хорошо для создания скриптов или других вещей, которые вы запускаете локально.
Итак, предлагаемый способ заключается в компиляции перед запуском с использованием команды babel
из пакета babel-cli
.
Это также подходит для npm advice об использовании транспилеров. (Этот совет дается для создания пакетов npm, но применяется и в этом случае).
Ответ 2
Я верю, что правильный способ сделать это - построить его (babel src -d dist
) и обслуживать переведенную версию. Это то, что я сейчас делаю, так как он чувствует себя более безопасным, хотя мне все еще нужно импортировать babel-polyfill
в мой загрузочный файл для работы среды регенератора. Без него я получаю ReferenceError: regeneratorRuntime is not defined
.
https://babeljs.io/docs/usage/polyfill/
server.js
'use strict'
if (process.env.NODE_ENV === 'development')
require('babel-register')
require('babel-polyfill')
var log = require('nlogger').logger(module)
var app = require('express')()
var cfg = require('./config')
var db = require('./db')
db.once('open', function () {
log.info('MongoDB connected.')
})
db.on('close', function () {
log.info('MongoDB closed.')
})
db.on('error', function (err) {
log.error('MongoDB connection error:', err)
})
require('./middleware/express')(app)
var server = app.listen(cfg.port, function () {
log.info('Server listening on port ', cfg.port)
})
// Start socket.io & bring in routes
var io = require('./io')(server)
require('./router')(app, io)
server.on('close', function () {
log.info('Server connection closed.')
})
module.exports = server