web-dev-qa-db-fra.com

require ('babel / register') ne fonctionne pas

J'ai une application isomorphe écrite en ES6 sur un client avec transpiler Babel . Je souhaite que mon serveur express utilise la même syntaxe ES6 que le code client.

Malheureusement, require('babel/register') ne fonctionne pas ..

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') ne transpile pas le fichier à partir duquel il est appelé. Si vous voulez que server.js soit inclus dans la transpilation à la volée, vous devez l'exécuter avec babel-node (Babel remplacement de la CLI pour node).

Voir ma réponse ici pour un exemple.

36

Puisque Babel 6 utilisation babel-register hook pour effectuer une transpilation à la volée.

Première:

 npm install babel-register

Ensuite, exigez-le avec:

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

To Convertissez votre Ecmascript 6 code à ecmascript 5, vous devez définir Babel presets option avec require babel-register Comme ça:

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

Contrairement à la réponse de @ alexander-pustovalov vous n’avez pas besoin de .babelrc fichier.

vous devez également installer babel-preset-es2015 :

npm install babel-preset-es2015

Enfin, votre fichier Server.js sera:

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

J'ai rencontré un problème similaire en essayant de rendre une page de réaction (.jsx) sur le serveur. Je l'ai corrigé en mettant l'extrait ci-dessous en haut de mon fichier de serveur

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

assurez-vous d'avoir npm babel-preset-es2015 et babel-preset-react installée

9
xiaolin

Selon ce document vous devez utiliser:

require("babel-register");

En outre, vous devez placer le fichier .babelrc à la racine du répertoire à partir duquel vous démarrez le serveur.

{
  "presets": ["es2015"]   
}
5

À la veille de 2019, nous n'avons toujours pas de bonne documentation dans les bibliothèques liées à JS, mais nous avons en revanche StackOverflow pour cela.

Pour utiliser babel sur Node.js, vous devez

  1. npm install @babel/register @babel/core @babel/preset-env
  2. Créer un fichier pre-index.js avec contenu joint
  3. Courir node pre-index

Vous pouvez utiliser imports et d’autres fonctionnalités uniquement dans index.js et le dépose imports ou requires.

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

étapes pour résoudre ce problème:

  1. supprimer require('babel/register'); de server.js
  2. créer un autre fichier d'entrée appelé start.js
  3. dans start.js,

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

Le résultat est que tout le code à l'intérieur de server.js sera transpilé à la volée par le registre. Veuillez vous assurer que vous avez correctement configuré babel avec un .babelrc ayant le contenu suivant

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