preactjs / preact-compat

ATTENTION: The React compatibility layer for Preact has moved to the main preact repo.
http://npm.im/preact-compat
MIT License
950 stars 148 forks source link

3.19.0 appears to break server-side rendering by relying on window #531

Closed cr3ative closed 4 years ago

cr3ative commented 5 years ago

Hi there,

I'm really sorry that I couldn't find a simple way to replicate this with demo code, but hopefully I can be descriptive.

We use a mixed Preact/React stack at the moment, and use preact-render-to-string to dump out the DOM to provide server-side rendering.

When our packages automatically updated to include preact-compat 3.19.0, SSR broke, with the following stack trace:

ReferenceError: window is not defined
    at evalmachine.<anonymous>:7654:360
    at ./node_modules/preact-context/dist/context.min.js (evalmachine.<anonymous>:7654:22)
    at Object../node_modules/preact-context/dist/context.min.js (evalmachine.<anonymous>:7654:118)
    at __webpack_require__ (evalmachine.<anonymous>:20:30)
    at Module../node_modules/preact-compat/dist/preact-compat.es.js (evalmachine.<anonymous>:6985:72)
    at __webpack_require__ (evalmachine.<anonymous>:20:30)
    at Module../app/node_modules/@buzzfeed/react-components/dist/module/lib/components/CdnImage/index.js (evalmachine.<anonymous>:119:63)
    at __webpack_require__ (evalmachine.<anonymous>:20:30)
    at Module../app/static/js/render_kit/components/ResultCard.js (evalmachine.<anonymous>:2639:133)
    at __webpack_require__ (evalmachine.<anonymous>:20:30)

This rendering kit uses a React component (CdnImage) and preact-compat fails when this line, in that component, is imported:

import React, { Component } from 'react';

Something in there is relying on window and we've bisected it to 3.19.0

I hope that helps. I'm sorry again for being so vague.

developit commented 4 years ago

Hi Paul - just wanted to apologize for the radio silence on this issue.

You're right that this was introduced in 3.19, since the error is coming from createContext, which was the most recently merged PR (#529). It looks like the issue is actually a build configuration error in preact-context - I'll try to find a fix there.

developit commented 4 years ago

This should be fixed!