Search code examples
javascriptnode.jsbabeljselectronecmascript-next

Electron and Babel 6 async / await throw unexpected token


I want to use async / await feature from ES7 in my Electron app, but it seems to be not working. It gives me

Syntax error: unexpected token function

after command npm start..

Electron: v0.37.6 Node: v5.11.0 stable Windows 10 x64

main.js

'use strict';

require("babel-core/register");
require("babel-polyfill");

(async function() {
  await console.log("test");
})()

package.json (snipped)

"devDependencies": {
  "babel": "^6.5.2",
  "babel-cli": "^6.7.7",
  "babel-core": "^6.7.7",
  "babel-eslint": "^6.0.3",
  "babel-plugin-syntax-async-functions": "^6.5.0",
  "babel-plugin-transform-async-to-generator": "^6.7.4",
  "babel-plugin-transform-regenerator": "^6.6.5",
  "babel-polyfill": "^6.7.4",
  "babel-preset-es2015": "^6.6.0",
  "babel-preset-stage-3": "^6.5.0",
  "electron-debug": "^0.6.0",
  "electron-prebuilt": "^0.37.0",
  "eslint": "^2.8.0"
}

.babelrc

{
  "presets": ["es2015", "stage-3"],
  "plugins": ["transform-async-to-generator", "syntax-async-functions", "transform-regenerator"]
}

Have you any idea what's missing in my conf etc. please?

Edit

I've also tried to add some import after require() but it ends with

Unexpected token import

It seems to like Babe is not loaded at all..


Solution

  • Finally I solved it in two easy steps:

    1. puting my Babel stuff in seperate file

    index.js

    'use strict';
    
    require('babel-core/register');
    require("babel-polyfill");
    require("./src/main");
    
    1. updated package.json to execute it on npm start

    package.json

    "scripts": {
      "start": "electron index.js"
    },