Skip to content

purs repl runs into TypeError: React.createClass is not a function #132

Open
@andreasthoelke

Description

@andreasthoelke

I'm running into this issue with all purescript-react based projects (e.g. ethul/purescript-react-example, alexmingoia/pux-starter-app, nwolverson/purescript-thermite-example or this repo purescript-contrib/purescript-react):

I can build the project fine (running e.g. npm install, pulp browserify --to dist/Main.js) and view the app in the browser.

Then I run: bower install purescript-psci-support and pulp repl (or purs repl 'src/**/*.purs' 'bower_components/purescript-*/src/**/*.purs')

I can then use the repl and even import modules that don’t use purescript-react, but once I import a module that imports React, I get his error:

PSCi, version 0.11.7
Type :? for help

> import Prelude
> 1+2
3

> import Main
> 1+2
/Users/andreas.thoelke/Documents/temp/purescript-thermite-example/.psci_modules/node_modules/react/foreign.js:120
  return React.createClass(result);
               ^

TypeError: React.createClass is not a function
    at Object.createClass (.../purescript-thermite-example/.psci_modules/node_modules/react/foreign.js:120:16)

I got some initial help with this at Slack/purescript:

I have a react folder in node-modules and a React folder in ../chapter8/.psci_modules/node_modules

natefaubion [3 days ago]
Oh the React folder in node_modules is probably the bindings

natefaubion [3 days ago]
in psci_modules/node_modules

natefaubion [3 days ago]
its just putting the compiler output within node_modules under psci_modules

natefaubion [3 days ago]
and then I bet there’s case insensitivity issue

natefaubion [3 days ago]
because there’s “react/index.js”

natefaubion [3 days ago]
and then “React/index.js” which is the compiler output

natefaubion [3 days ago]
so it’s doing require("react") which is actually pointing back to itself

natefaubion [3 days ago]
require react resolving to to React, ie the bindings and not the library

paf31 [2 days ago]
.psci_modules/node_modules should exist

paf31 [2 days ago]
React in there is the compiled purs code though

paf31 [2 days ago]
Notice though how purescript-react doesn't use require

paf31 [2 days ago]
React.createClass and so on

paf31 [2 days ago]
React won't be in global scope there

natefaubion [1 day ago]
FWIW, the latest react bindings don’t use a global

natefaubion [1 day ago]
it uses a normal require

I'm still not sure if I'm missing something obvious or if this issue should be raised at https://github.com/purescript/purescript.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions