对样式化组件进行预先处理会导致浏览器控制台出现错误

uko*_*ath 3 webpack preact styled-components

仅导入样式化组件会在浏览器控制台中导致此错误:

styled-components.browser.esm.js?face:1670 Uncaught TypeError: (0 , _react.createContext) is not a function
    at Object.eval (styled-components.browser.esm.js?face:1670)
    at eval (styled-components.browser.esm.js:2490)
    at Object../node_modules/styled-components/dist/styled-components.browser.esm.js (vendors~index.js:167)
    at __webpack_require__ (index.js:79)
    at eval (index.js?12d5:2)
    at Object../src/index.js (index.js:165)
    at __webpack_require__ (index.js:79)
    at checkDeferredModules (index.js:46)
    at index.js:152
    at index.js:155
Run Code Online (Sandbox Code Playgroud)

我正在使用webpack,preact,Babel。

在新的空构建中,要重现的代码实际上就是这样:

src / index.js:

styled-components.browser.esm.js?face:1670 Uncaught TypeError: (0 , _react.createContext) is not a function
    at Object.eval (styled-components.browser.esm.js?face:1670)
    at eval (styled-components.browser.esm.js:2490)
    at Object../node_modules/styled-components/dist/styled-components.browser.esm.js (vendors~index.js:167)
    at __webpack_require__ (index.js:79)
    at eval (index.js?12d5:2)
    at Object../src/index.js (index.js:165)
    at __webpack_require__ (index.js:79)
    at checkDeferredModules (index.js:46)
    at index.js:152
    at index.js:155
Run Code Online (Sandbox Code Playgroud)

package.json:

import { h, Component, render } from "preact"
import styled from "styled-components"
Run Code Online (Sandbox Code Playgroud)

webpack.conf.js:

{
  "name": "App",
  "version": "0.0.1",
  "description": "Web app.",
  "main": "index.js",
  "scripts": {
    "build": "rm -rf dist/* && NODE_ENV=development webpack -d --config webpack.conf.js --env development"
  },
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1.5",
    "babel-plugin-transform-react-jsx": "^6.24.1",
    "babel-preset-env": "^1.7.0",
    "babel-preset-react": "^6.24.1",
    "html-webpack-plugin": "^3.2.0",
    "preact": "^8.4.2",
    "preact-compat": "^3.18.4",
    "styled-components": "^4.1.3",
    "webpack": "^4.28.4",
    "webpack-cli": "^3.2.1"
  },
  "dependencies": {}
}
Run Code Online (Sandbox Code Playgroud)

使用Build可以npm run build正常工作,但是在浏览器中访问生成的页面会产生上述错误。

任何指针将不胜感激。

编辑:

根据针对Preact-CLI记录的此问题,preact没有反应,contextApi因此我应该降级styled-components到v3而不是v4。降级确实确实可以解决该问题。

令人困惑的是,《 preact》的作者Jason Miller 在一条推文中说,“ preact可以很好地支持上下文”。我可能误会了这一点。

mar*_*ter 5

免责声明:我从事预言工作。

您看到此错误的原因createContext是Preact 8.x不支持-API。这将是我们即将推出的下一个主要版本的一部分。我们目前处于测试版状态,希望很快就可以发布。

如果您绝对需要styled-components使用Preact 8.x,那么唯一的选择就是styled-components像@ukosteopath建议的那样降级到V3。