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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/29207878/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-23 02:59:06  来源:igfitidea点击:

require('babel/register') doesn't work

javascriptnode.jsexpressecmascript-6babeljs

提问by Kosmetika

I have isomorphic app written in ES6 on client with Babel transpiler. I want my express server to have the same ES6 syntax as client code.

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

Unfortunately require('babel/register')doesn't work..

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

server.js

服务器.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);
});

采纳答案by X?pplI'-I0llwlg'I -

require('babel/register')doesn't transpile the file it is called from. If you want server.js to be included in on-the-fly transpilation, you should execute it with babel-node(Babel's CLI replacementfor node).

require('babel/register')不转译它被调用的文件。如果你想包括在上即时transpilation server.js,你应该执行它babel-node(巴别塔的CLI替代node)。

See my answer herefor an example.

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

回答by ahmed hamdy

Since Babel 6use babel-register hookto make on-the-fly transpilation.

由于Babel 6用于babel-register hook进行即时转译。

First:

第一的:

 npm install babel-register

Then require it with:

然后要求它:

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

ToConvert your Ecmascript 6code to ecmascript 5, you must set Babel presetsoption with require babel-registerLike this:

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

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

Unlike the answer of @alexander-pustovalovyou do not need to .babelrcfile.

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

you must also install babel-preset-es2015:

您还必须安装babel-preset-es2015

npm install babel-preset-es2015

Finally your Server.jsfile will be:

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

回答by xiaolin

I ran into a similar issue trying to render a react page (.jsx) on the server. I fixed it by putting the snippet below at the top of my server file

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

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

make sure you have npm babel-preset-es2015and babel-preset-reactinstalled

确保你有 npmbabel-preset-es2015babel-preset-react安装

回答by Alexander Pustovalov

According to this documentyou have to use:

根据此文档,您必须使用:

require("babel-register");

Additionally, you have to put .babelrc file in the root of directory from which you start server.

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

{
  "presets": ["es2015"]   
}

回答by polkovnikov.ph

In the eve of 2019 we still have no good documentation in JS-related libraries, but, on the other hand, we have StackOverflow for that.

在 2019 年的前夜,我们仍然没有与 JS 相关的库中的好的文档,但是,另一方面,我们有 StackOverflow。

In order to use babelon Node.js, you need to

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

  1. npm install @babel/register @babel/core @babel/preset-env
  2. Create a file pre-index.jswith attached contents
  3. Run node pre-index
  1. npm install @babel/register @babel/core @babel/preset-env
  2. 创建pre-index.js带有附加内容的文件
  3. node pre-index

You can use imports and other features only in index.jsand files it imports or requires.

import只能在s 或s 中使用s 和其他功能index.js并将其归档。importrequire

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

回答by WaiKit Kung

steps to fix this:

解决此问题的步骤:

  1. remove require('babel/register');from server.js
  2. create another entry file called start.js
  3. in start.js,

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

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

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

The result is that all code inside server.js will be transpiled on the fly by the register. Please make sure you have configured babel correctly with a .babelrc having the content like below

结果是 server.js 中的所有代码都将被寄存器动态转换。请确保您已使用 .babelrc 正确配置了 babel,其内容如下所示

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

回答by radzak

Since Babel 7 use, you can use @babel/register

由于 Babel 7 使用,你可以使用@babel/register

npm install --save-dev @babel/core @babel/register

or

或者

yarn add --dev @babel/core @babel/register

if you're using yarn.

如果您使用的是yarn

In the code you just include the following line:

在代码中,您只需包含以下行:

require("@babel/register");

回答by Pierrickouw

You need to compile your code usingBabel. Check out the docsfrom their website.

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

Install babelwith npm install -g babelthen do babel app.js > compiledApp.jsto compile your ES6 code into ES5 code. You can then run compiledApp.js.

babel使用npm install -g babelthen do安装babel app.js > compiledApp.js将您的 ES6 代码编译为 ES5 代码。然后您可以运行compiledApp.js.

The runtime babel/registeris still needed if your want to use some functions of ES6 like Object.assignwhich are not compiled but executed thanks to a polyfill. (Check herefor examples and more details)

babel/register如果您想使用 ES6 的某些功能,例如Object.assign没有编译但由于 polyfill 执行的功能,仍然需要运行时。(在此处查看示例和更多详细信息)

Edit:As said in the comment, you can use the registerto compile on the fly. But it will compile modules you are requiring after this register. It will hook the requirefunction from node. More here. You will still need to compile the file where the registeror to not use any ES6 in this file.

编辑:如评论中所述,您可以使用register即时编译。但它会在此之后编译您需要的模块register。它将require从.hook函数node。更多在这里。您仍然需要编译该文件,register或者在该文件中不使用任何 ES6。