Clint Andrew Hall
Clint Andrew Hall

Reputation: 95

Could not create Relay Container; graphql.js file appears to have webpack artifacts?

I'm using Relay with CRA in an Electron container, and I'm getting a very odd error I can't seem to diagnose: it appears the GraphQL fragment, as imported, contains Webpack artifacts?

Could not create Relay Container for `UsersGrid`. Expected a set of GraphQL fragments, got `function () {
  const node = __webpack_require__(/*! ./__generated__/UsersGrid_viewer.graphql */ "./src/components/users-grid/__generated__/UsersGrid_viewer.graphql.js");

Is Webpack compiling the .graphql.js file somehow? Or is there something else I should be looking at?

This is the Relay container:

import { createFragmentContainer, graphql } from 'react-relay';
import UsersGrid from './UsersGrid';

export default createFragmentContainer(
  UsersGrid,
  graphql`
    fragment UsersGrid_viewer on Query {
      user(login: "jvcjunior") {
        followers(first: 10) {
          edges {
            node {
              name
              avatarUrl
            }
          }
        }
      }
    }
  `
);

which is getting compiled inline into:

/***/ "./src/components/users-grid/UsersGrid.relay.js":
/*!******************************************************!*\
  !*** ./src/components/users-grid/UsersGrid.relay.js ***!
  \******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react_relay__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-relay */ "./node_modules/react-relay/index.js");
/* harmony import */ var react_relay__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_relay__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _UsersGrid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./UsersGrid */ "./src/components/users-grid/UsersGrid.js");


/* harmony default export */ __webpack_exports__["default"] = (Object(react_relay__WEBPACK_IMPORTED_MODULE_0__["createFragmentContainer"])(_UsersGrid__WEBPACK_IMPORTED_MODULE_1__["default"], function () {
  const node = __webpack_require__(/*! ./__generated__/UsersGrid_viewer.graphql */ "./src/components/users-grid/__generated__/UsersGrid_viewer.graphql.js");

  if (node.hash && node.hash !== "d730274a63d8021d6427a27e7c3e2c27") {
    console.error("The definition of 'UsersGrid_viewer' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data.");
  }

  return __webpack_require__(/*! ./__generated__/UsersGrid_viewer.graphql */ "./src/components/users-grid/__generated__/UsersGrid_viewer.graphql.js");
}));

/***/ }),

Upvotes: 2

Views: 685

Answers (1)

Alexes
Alexes

Reputation: 230

Try using

createFragmentContainer(Component, {
  viewer: graphql`
    fragment UsersGrid_viewer on Query { ... }
  `
})

instead

createFragmentContainer(Component,
  graphql`
    fragment UsersGrid_viewer on Query { ... }
  `
)

Upvotes: 4

Related Questions