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

我有ES6客户端上的同构应用程序与Babel transpiler 。 我希望我的快递服务器具有与客户端代码相同的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); }); 

require('babel/register')不会传输它被调用的文件。 如果你想让server.js被包含在快速转换中,你应该使用babel-node (Babel的CLIreplace node )执行它。

在这里看到我的答案为例。

由于Babel 6使用了babel-register hook来进行实时转换。

第一:

  npm install babel-register 

然后要求:

 require('babel-register'); // not using // require('babel/register'); // or // require('babel-core/register); 

要将您的Ecmascript 6代码转换为ecmascript 5 ,您必须将Babel presets选项设置为需要babel-register像这样:

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

不像@ alexander-pustovalov的答案,你不需要.babelrc文件。

你还必须安装babel-preset-es2015

 npm install babel-preset-es2015 

最后你的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); }); 

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

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

确保你已经安装了npm babel-preset-es2015babel-preset-react

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

 require("babel-register"); 

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

 { "presets": ["es2015"] } 

步骤来解决这个问题:

  1. 删除require('babel/register'); 从server.js
  2. 创build另一个名为start.js的入口文件
  3. 在start.js中,

    require('babel/register'); module.exports = require('./server.js');

其结果是server.js中的所有代码都将由寄存器实时传输。 请确保你已经正确地configuration了babel,并且内容如下.babelrc

 { "presets": ["es2015", "stage-0"] } 

你需要使用 Babel编译你的代码。 从他们的网站查看文档 。

使用npm install -g babel然后使用babel app.js > compiledApp.js将ES6代码编译为ES5代码。 然后你可以运行compiledApp.js

如果你想使用ES6的某些function,比如Object.assign ,那么这个运行时的babel/register仍然是需要的,这些function并没有被编译,而是由于Object.assign而被执行。 ( 点击查看示例和更多细节)

编辑:如评论中所说,你可以使用register来即时编译。 但是它会在这个register之后编译你需要的模块。 它会挂钩noderequire函数。 更多在这里 。 你仍然需要编译这个文件所在的文件,或者不要在这个文件中使用任何ES6。