Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

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

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);
});
like image 251
Kosmetika Avatar asked Mar 23 '15 10:03

Kosmetika


People also ask

Can I use require in Babel?

Babel converts modules to CommonJS by default, which is what Node uses and which defines a require function (again, nothing to do with require. js). However, you can tell Babel to convert modules to something else, e.g. AMD or UMD, which would then work with require. js.

What does Babel Register do?

The purpose of babel is to transpile your js current code to an understandable version of js for the given environment, tool, framework you're using.


4 Answers

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

First:

 npm install babel-register 

Then require it with:

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

To Convert your Ecmascript 6 code to ecmascript 5, you must set Babel presets option with require babel-register Like this:

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

Unlike the answer of @alexander-pustovalov you do not need to .babelrc file.

you must also install babel-preset-es2015:

npm install babel-preset-es2015 

Finally your Server.js file will be:

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); }); 
like image 102
ahmed hamdy Avatar answered Sep 26 '22 08:09

ahmed hamdy


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 replacement for node).

See my answer here for an example.

like image 21
XåpplI'-I0llwlg'I - Avatar answered Sep 23 '22 08:09

XåpplI'-I0llwlg'I -


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

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

make sure you have npm babel-preset-es2015 and babel-preset-react installed

like image 44
xiao Avatar answered Sep 24 '22 08:09

xiao


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.

In order to use babel on Node.js, you need to

  1. npm install @babel/register @babel/core @babel/preset-env
  2. Create a file pre-index.js with attached contents
  3. Run node pre-index

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

require('@babel/register')({
    presets: [
        [
            "@babel/preset-env",
            {
                targets: {
                    node: "current"
                }
            }
        ]
    ]
});
require('./index.js');
like image 34
polkovnikov.ph Avatar answered Sep 23 '22 08:09

polkovnikov.ph