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

根据babel的正式文件, 不应该在生产中使用babel-node 。 有些人说,如果你不想在运行之前把你的ES6代码编译到ES5中,你可以使用babel/register而不是babel-node 。 但是babel-node没有在内部使用babel/registerbabel-noderequire('babel/register');什么区别require('babel/register'); 。 是否可以使用require('babel/register'); 在生产?

Babel手册 (从babeljs.io链接)说,在生产中使用babel-register是不好的做法( 见babel-register用户指南 ):

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

所以看来build议的方法是在运行babel-cli包中的babel命令之前进行编译。

这也符合npm关于使用转译器的build议 。 (这个build议是给npm包创作的,但也适用于这种情况)。

我相信这样做的正确方法是构build它( 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