web-dev-qa-db-ja.com

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);
});
45
Kosmetika

require('babel/register')は、呼び出し元のファイルをトランスパイルしません。 server.jsをオンザフライトランスパレーションに含める場合は、babel-node(Babelの CLIの置き換えnodeの場合)。

例については、私の答え here をご覧ください。

36

Babel 6babel-register hook を使用して、オンザフライでのトランスピレーションを行います。

最初:

 npm install babel-register

次に、それを必要とします:

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

ToEcmascript 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);
});
48
ahmed hamdy

サーバーで反応ページ(.jsx)をレンダリングしようとすると、同様の問題が発生しました。サーバーファイルの先頭に以下のスニペットを配置して修正しました

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

npmがあることを確認してくださいbabel-preset-es2015およびbabel-preset-reactインストール済み

9
xiaolin

これによると document を使用する必要があります:

require("babel-register");

また、サーバーを起動するディレクトリのルートに.babelrcファイルを配置する必要があります。

{
  "presets": ["es2015"]   
}

2019年の前夜には、JS関連のライブラリにはまだ良いドキュメントがありませんが、一方で、そのためのStackOverflowがあります。

Node.jsでbabelを使用するには、次のことが必要です。

  1. npm install @babel/register @babel/core @babel/preset-env
  2. 添付コンテンツを含むファイルpre-index.jsを作成します
  3. node pre-indexを実行します

importsおよびその他の機能は、index.jsおよびimportsまたはrequiresでのみ使用できます。

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

これを修正する手順:

  1. server.jsからrequire('babel/register');を削除します
  2. start.jsという別のエントリファイルを作成します
  3. start.jsで、

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

その結果、server.js内のすべてのコードは、レジスタによってオンザフライで変換されます。以下のような内容の.babelrcでbabelを正しく設定したことを確認してください

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