是否可以在生产中使用`require('babel / register);`

时间:2015-11-13 13:31:03

标签: node.js babeljs

根据babel的官方文件, 不应在生产中使用babel/register。有人说如果你不想在运行之前将ES6代码编译成ES5,你可以使用babel-node而不是babel-node。但是babel/register内部没有使用babel-node吗? require('babel/register');require('babel/register');之间有什么区别?在生产中使用window可以吗?

2 个答案:

答案 0 :(得分:9)

Babel Handbook(从babeljs.io链接)表示在生产中使用babel-register是不好的做法(see babel-register user guide):

  

请注意,这不适用于生产用途。部署以这种方式编译的代码被认为是不好的做法。在部署之前提前编译要好得多。但是,对于构建脚本或本地运行的其他东西,这非常有效。

因此,似乎建议的方法是在使用babel包中的babel-cli命令运行之前进行编译。

这也适用于使用转译器的npm advice。 (该建议是为创作npm包而提供的,但在这种情况下也适用)。

答案 1 :(得分:1)

我认为正确的方法是构建它(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