根据Babel的官方文档,生产环境中不应该使用`babel-node`。有人说,如果你不想在运行之前将你的ES6代码编译成ES5,可以使用`babel/register`来替代`babel-node`。但是,`babel-node`内部是使用`babel/register`的吗?`babel-node`和`require('babel/register')`有什么区别?在生产环境中使用`require('babel/register')`可以吗?
babel-register
是不好的做法(详见:babel-register用户手册):
因此,似乎建议在运行之前使用请注意,这并不适用于生产环境。部署此类代码被认为是不好的做法。最好在部署之前预先编译。但是,在构建脚本或其他本地运行的东西方面,它确实很有效。
babel-cli
软件包中的babel
命令进行编译。babel src -d dist
)并提供转译版本。目前我正在这样做,因为它感觉更安全,尽管我仍然需要在启动文件中导入babel-polyfill
以使regenerator运行时正常工作。如果没有它,我会收到ReferenceError: regeneratorRuntime未定义
的错误。
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
babel-node
实现了自己的 CLI 接口,因此它不仅仅是要求'babel/register'
。 - Leonid Beschastnybabel
是一个关于 Python 库的问题。 - Felix Kling