是否可以在生产中使用require('babel / register)'
根据babel的正式文件, 不应该在生产中使用babel-node
。 有些人说,如果你不想在运行之前把你的ES6代码编译到ES5中,你可以使用babel/register
而不是babel-node
。 但是babel-node
没有在内部使用babel/register
? babel-node
和require('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