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 ..
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')
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.
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);
});
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
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"]
}
À 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
npm install @babel/register @babel/core @babel/preset-env
pre-index.js
avec contenu jointnode pre-index
Vous pouvez utiliser import
s et d’autres fonctionnalités uniquement dans index.js
et le dépose import
s ou require
s.
require('@babel/register')({
presets: [
[
"@babel/preset-env",
{
targets: {
node: "current"
}
}
]
]
});
require('./index.js');
étapes pour résoudre ce problème:
require('babel/register');
de server.jsdans 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"]
}