Подтвердить что ты не робот

Можно ли использовать `require ('babel/register),` in production

Он не должен использовать babel-node в производстве в соответствии с официальным документом babel. Некоторые сказали, что вы можете использовать babel/register вместо babel-node, если вы не хотите скомпилировать свой ES6-код в ES5 перед запуском. Но не использует babel-node babel/register внутренне? В чем разница между babel-node и require('babel/register');. Можно ли использовать require('babel/register'); в производстве?

4b9b3361

Ответ 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