babel/register
。有人说如果你不想在运行之前将ES6代码编译成ES5,你可以使用babel-node
而不是babel-node
。但是babel/register
内部没有使用babel-node
吗? require('babel/register');
和require('babel/register');
之间有什么区别?在生产中使用window
可以吗?
答案 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