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-es2015
和babel-preset-react
根据这个文件你必须使用:
require("babel-register");
另外,您必须将.babelrc文件放在您启动服务器的目录的根目录下。
{ "presets": ["es2015"] }
步骤来解决这个问题:
- 删除
require('babel/register');
从server.js - 创build另一个名为start.js的入口文件
-
在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
之后编译你需要的模块。 它会挂钩node
的require
函数。 更多在这里 。 你仍然需要编译这个文件所在的文件,或者不要在这个文件中使用任何ES6。