require('babel/register')不'不起作用
require('babel/register') doesn't work
我在客户端用Babel transpiler用ES6编写了同构应用程序。我希望我的express服务器具有与客户端代码相同的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);
});
由于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
选项和require 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);
});
require('babel/register')
不会对调用它的文件进行transfile。如果您希望server.js包含在动态编译中,那么应该使用babel-node
(Babel的CLI替代node
)来执行它。
举个例子,请看我的答案。
我在服务器上渲染react页面(.jsx)时遇到了类似的问题。我通过将下面的片段放在我的服务器文件的顶部来修复它
require('babel-register')({
presets: ['es2015', 'react']
});
确保已安装npm babel-preset-es2015
和babel-preset-react
2019年前夕,我们在JS相关库中仍然没有好的文档,但另一方面,我们有StackOverflow。
为了在Node.js上使用babel
,您需要
npm install @babel/register @babel/core @babel/preset-env
- 创建带有附加内容的文件
pre-index.js
- 运行
node pre-index
您只能在index.js
中使用import
s和其他功能,并将其归档为import
s或require
s。
require('@babel/register')({
presets: [
[
"@babel/preset-env",
{
targets: {
node: "current"
}
}
]
]
});
require('./index.js');
根据本文档,您必须使用:
require("babel-register");
此外,您必须将.babelrc文件放在启动服务器的目录的根目录中。
{
"presets": ["es2015"]
}
修复此问题的步骤:
- 从server.js中删除
require('babel/register');
- 创建另一个名为start.js的入口文件
-
在start.js中,
require('babel/register'); module.exports = require('./server.js');
结果是,server.js中的所有代码都将被寄存器动态地转换。请确保您已使用.babelrc正确配置babel,其内容如下
{
"presets": ["es2015", "stage-0"]
}
由于使用了Babel 7,您可以使用@Babel/register
npm install --save-dev @babel/core @babel/register
或
yarn add --dev @babel/core @babel/register
如果你用的是纱线。
在代码中只包含以下行:
require("@babel/register");
您需要使用Babel编译代码。查看他们网站上的文档。
使用npm install -g babel
安装babel
,然后使用babel app.js > compiledApp.js
将ES6代码编译为ES5代码。然后可以运行compiledApp.js
。
如果您想使用ES6的一些函数(如Object.assign
),则仍然需要运行时babel/register
,这些函数由于polyfill而未编译但执行。(点击此处查看示例和更多详细信息)
编辑:正如评论中所说,您可以使用register
进行动态编译。但它将编译您在此register
之后需要的模块。它将从node
挂接require
函数。点击此处了解更多信息。您仍然需要编译register
所在的文件,或者在此文件中不使用任何ES6。
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- 幻灯片滚动javascript不起作用
- 简单的javascript在Shopify中不起作用
- Recaptcha在IE7和IE8中不起作用
- Ember Data DS.Model's set函数不起作用
- JsFiddle上的鼠标事件不起作用
- 我的AngularJS表达式没有'不起作用
- 点击按钮输入不起作用
- 面向对象的Javascript代码在IE7中不起作用
- 分部隐藏在jquery中不起作用
- 在phonegap应用程序内部重定向不起作用
- Array.length似乎不起作用;console.log则显示其他情况
- $ionicplatform内的$scope不;不起作用
- 我的javascript for循环不起作用
- Meteor-添加用户自定义字段的方法不起作用
- 为什么 .focus() 不起作用,而 .css(“color”,“red”) 在同一个选择器上起作用
- Textarea必需的attribut在javascript中不起作用
- 为什么javascript:void(0)在Firefox中不起作用
- require('babel/register')不'不起作用