Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TypeError: Class constructor Component cannot be invoked without 'new' #37

Closed
maticzav opened this issue Aug 12, 2017 · 6 comments
Closed

Comments

@maticzav
Copy link
Contributor

Hi guys!
So I am getting this error, been busting my head over it all day, any thought?

Help, much appreciated 😄.

src/index.js

import {h, render, Component} from 'ink'

export default class extends Component {
  render() {
    return (
      <div>a</div>
    )
  }
}

demo.js

import {h, render} from 'ink'
import Route from './src/index'

// Router
const Demo = () => {
  return (
    <Route/>
  )
}

// Ink
render(<Demo/>)

.babelrc

{
  "presets": ["es2015", "stage-2"],
  "plugins": [
    ["transform-class-properties"],
    ["transform-react-jsx", {
      "pragma": "h",
      "useBuiltIns": true
    }],
    ["transform-object-rest-spread",
    {
      "useBuiltIns": true
    }]

  ]
}

package.json

{
  "name": "ink-router",
  "version": "1.0.0",
  "description": "A router component for Ink.",
  "license": "MIT",
  "main": "dist/index.js",
  "scripts": {
    "pretest": "npm run build",
    "test": "xo",
    "start": "babel-node dist/index.js",
    "demo": "babel-node demo.js",
    "build": "babel src --out-dir=dist",
    "prepublish": "npm run build"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "dist"
  ],
  "keywords": [
    "ink",
    "ink-component"
  ],
  "dependencies": {
    "ink": "^0.3.0",
    "prop-types": "^15.5.10"
  },
  "devDependencies": {
    "babel-cli": "^6.24.1",
    "babel-eslint": "^7.2.3",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "babel-plugin-transform-object-rest-spread": "^6.23.0",
    "babel-plugin-transform-react-jsx": "^6.24.1",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-node6": "^11.0.0",
    "babel-preset-stage-2": "^6.24.1",
    "eslint-config-xo-react": "^0.13.0",
    "eslint-plugin-react": "^7.2.0",
    "eslint-plugin-xo": "^1.0.0",
    "xo": "^0.18.2"
  },
  "xo": {
    "extends": "xo-react",
    "parser": "babel-eslint",
    "esnext": true,
    "space": true,
    "semicolon": false,
    "rules": {
      "new-cap": 0,
      "complexity": 0,
      "default-case": 0,
      "react/no-unused-prop-types": 1
    },
    "settings": {
      "react": {
        "pragma": "h"
      }
    }
  }
}
@vadimdemedes
Copy link
Owner

This is happening, because Babel's preset-es2015 transpiles ES6 classes. This is a very popular issue, I'd say - babel/babel#4269.

Solution would be to use presets that target more modern Node.js versions, for example - https://www.npmjs.com/package/babel-preset-es2015-node5.

@maticzav
Copy link
Contributor Author

It works now! Thank you so much!!

@vadimdemedes
Copy link
Owner

You're welcome :)

@mgrip
Copy link
Contributor

mgrip commented May 20, 2018

if anyone stumbles upon this using the env preset like I was, you can set a more specific target to prevent babel from transpiling ES6 classes

.babelrc:

{
  "presets": [["env", { "targets": { "node": "current" } }]],
  "plugins": [
    [
      "transform-react-jsx",
      {
        "pragma": "h"
      }
    ]
  ]
}

@ghost
Copy link

ghost commented Aug 21, 2019

HI @vadimdemedes ,

Help needed here also:

angular/angular-cli#15392

@vadimdemedes
Copy link
Owner

@KumaresanDevi how is it related?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants