From cd9bdca5f682be33e4806beadb216a48bcfa6309 Mon Sep 17 00:00:00 2001 From: Rafael Almeida <rafaelalmeidatk@gmail.com> Date: Fri, 11 Oct 2019 03:09:40 -0300 Subject: [PATCH] Add polyfill for React.createContext --- examples/using-inferno/README.md | 1 + examples/using-inferno/lib/inferno-compat.js | 11 +++++++++++ examples/using-inferno/package.json | 1 + examples/using-inferno/server.js | 5 +++-- 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 examples/using-inferno/lib/inferno-compat.js diff --git a/examples/using-inferno/README.md b/examples/using-inferno/README.md index efbf117936b27..aaa47ca585949 100644 --- a/examples/using-inferno/README.md +++ b/examples/using-inferno/README.md @@ -44,3 +44,4 @@ This example uses [Inferno](https://github.com/infernojs/inferno), an insanely f Here's how we did it: - Use `next.config.js` to customize our webpack config to support [inferno-compat](https://www.npmjs.com/package/inferno-compat) +- Create `lib/inferno-compat.js` to polyfill the `React.createContext` API (required by Next.js) that is not available by `inferno-compat` diff --git a/examples/using-inferno/lib/inferno-compat.js b/examples/using-inferno/lib/inferno-compat.js new file mode 100644 index 0000000000000..e21320e5f6f56 --- /dev/null +++ b/examples/using-inferno/lib/inferno-compat.js @@ -0,0 +1,11 @@ +const React = require('inferno-compat') +const createContext = require('create-react-context/lib/implementation') + +Object.keys(React).forEach(key => { + if (key === 'default' || key === '__esModule') return + exports[key] = React[key] +}) + +// bypass export of React.createContext +exports.createContext = createContext +exports.default = React.default diff --git a/examples/using-inferno/package.json b/examples/using-inferno/package.json index abdd25ff7ead7..2f74fa7bf5cc7 100644 --- a/examples/using-inferno/package.json +++ b/examples/using-inferno/package.json @@ -7,6 +7,7 @@ "start": "NODE_ENV=production node server.js" }, "dependencies": { + "create-react-context": "0.3.0", "inferno": "7.3.2", "inferno-compat": "7.3.2", "inferno-server": "7.3.2", diff --git a/examples/using-inferno/server.js b/examples/using-inferno/server.js index 86b0cdcdee2f4..0e351d2cc4649 100644 --- a/examples/using-inferno/server.js +++ b/examples/using-inferno/server.js @@ -1,13 +1,14 @@ const port = parseInt(process.env.PORT, 10) || 3000 const dev = process.env.NODE_ENV !== 'production' const moduleAlias = require('module-alias') +const path = require('path') // For the development version, we'll use React. // Because, it support react hot loading and so on. if (!dev) { - moduleAlias.addAlias('react', 'inferno-compat') + moduleAlias.addAlias('react', path.resolve('./lib/inferno-compat.js')) moduleAlias.addAlias('react-dom/server', 'inferno-server') - moduleAlias.addAlias('react-dom', 'inferno-compat') + moduleAlias.addAlias('react-dom', path.resolve('./lib/inferno-compat.js')) } const { createServer } = require('http')