require('babel/register')不起作用

Kos*_*ika 46 javascript node.js express ecmascript-6 babeljs

我在客户端用Babel编译器在ES6中编写了同构应用程序.我希望我的快速服务器具有与客户端代码相同的ES6语法.

不幸的是require('babel/register')不起作用..

server.js

require('babel/register'); // doesn't work
// require('babel-core/register); doesn't work..

const env = process.env.NODE_ENV || 'development';
const port = process.env.NODE_PORT || 1995;

const http = require('http');
const express = require('express');
const address = require('network-address');

let app = express();

app.set('port', port);
app.use(express.static(path.join(__dirname, 'public')));

app.get('*', (req, res) => {
   res.send('Hello!');
});

http.createServer(app).listen(app.get('port'), function () {
   console.info('Demo app is listening on "%s:%s" env="%s"', address(), app.get('port'), env);
});
Run Code Online (Sandbox Code Playgroud)

ahm*_*mdy 48

由于Babel 6使用babel-register hook使上即时transpilation.

第一:

 npm install babel-register
Run Code Online (Sandbox Code Playgroud)

然后要求:

require('babel-register');    
// not using 
// require('babel/register');
// or 
// require('babel-core/register);
Run Code Online (Sandbox Code Playgroud)

要将Ecmascript 6代码转换为ecmascript 5,必须Babel presets使用require 设置选项babel-register如下:

require('babel-register')({
  presets: [ 'es2015' ]
});
Run Code Online (Sandbox Code Playgroud)

@ alexander-pustovalov的答案不同,您不需要.babelrc提交.

你还必须安装babel-preset-es2015:

npm install babel-preset-es2015
Run Code Online (Sandbox Code Playgroud)

最后你的Server.js文件将是:

require('babel-register')({
   presets: [ 'es2015' ]
});

const env = process.env.NODE_ENV || 'development';
const port = process.env.NODE_PORT || 1995;

const http = require('http');
const express = require('express');
const address = require('network-address');

let app = express();

app.set('port', port);
app.use(express.static(path.join(__dirname, 'public')));

app.get('*', (req, res) => {
   res.send('Hello!');
});

http.createServer(app).listen(app.get('port'), function () {
   console.info('Demo app is listening on "%s:%s" env="%s"', address(), app.get('port'), env);
});
Run Code Online (Sandbox Code Playgroud)


Xåp*_* - 36

require('babel/register')不会传输从中调用的文件.如果你想被列入server.js上即时transpilation,你应该执行它babel-node(巴别塔的CLI替代node).

见我的答案在这里的一个例子.

  • @FilipSpiridonov现在是`require('babel-register')`. (14认同)
  • 使用'require('babel-core/register')`和Babel 6 (11认同)
  • 它现在是`require(@ babel/register)` (3认同)

xia*_*lin 9

我遇到了类似的问题,尝试在服务器上呈现反应页面(.jsx).我通过将下面的代码段放在我的服务器文件的顶部来修复它

require('babel-register')({
    presets: ['es2015', 'react']
});
Run Code Online (Sandbox Code Playgroud)

确保你有npm babel-preset-es2015babel-preset-react安装

  • 感谢您的发表!你解决了我已经有2天了我的问题!巴贝尔的文件非常糟糕**! (3认同)

Ale*_*lov 5

根据这份文件 你必须使用:

require("babel-register");
Run Code Online (Sandbox Code Playgroud)

此外,您必须将.babelrc文件放在启动服务器的目录的根目录中.

{
  "presets": ["es2015"]   
}
Run Code Online (Sandbox Code Playgroud)


pol*_*.ph 5

在2019年的前夕,我们仍然没有与JS相关的库中的优秀文档,但是另一方面,我们为此提供了StackOverflow。

为了babel在Node.js 上使用,您需要

  1. npm install @babel/register @babel/core @babel/preset-env
  2. 创建pre-index.js带有附件内容的文件
  3. node pre-index

您可以使用import只在S和其他功能index.js和文件是importS或require秒。

require('@babel/register')({
    presets: [
        [
            "@babel/preset-env",
            {
                targets: {
                    node: "current"
                }
            }
        ]
    ]
});
require('./index.js');
Run Code Online (Sandbox Code Playgroud)