graphql-js
graphql-js copied to clipboard
rollup-plugin-inject: failed to parse graphql/jsutils/instanceOf.mjs
When this library is used in the Nuxt 3 project and compiled for Cloudflare it fails like this:
ℹ Building Nitro Server (preset: cloudflare-pages) nitro 19:16:00
(inject plugin) rollup-plugin-inject: failed to parse /home/projects/github-twqhau-upewai/node_modules/graphql/jsutils/instanceOf.mjs. Consider restricting the plugin to particular files via options.include
[nitro 19:16:14] ERROR RollupError: Unexpected token (Note that you need plugins to import files that are not JavaScript)
10: /* c8 ignore next 6 */
11: // FIXME: https://github.com/graphql/graphql-js/issues/2317
12: globalThis.process && globalThis.process.env.NODE_ENV === 'production'
^
13: ? function instanceOf(value, constructor) {
14: return value instanceof constructor;
[19:16:14] ERROR Unexpected token (Note that you need plugins to import files that are not JavaScript)
at error (<anonymous>)
at setSource (<anonymous>)
at (<anonymous>)
Happens in version 16.7.1 and 16.7.0 but works with 16.6.0 and 17.0.0-alpha.2.
Repro: https://stackblitz.com/edit/github-twqhau-upewai
Start with: NITRO_PRESET=cloudflare-pages npm run build
This is also tracked as an issue in Nuxt and nitro: nuxt/nuxt#21768. Other issues like #3918 also refer to the same problem, but it seem it will be solved soon by PR #3927.
The module tries to access globalThis.process
, which makes the Cloudflare pages deployment fail. You can't access process
in Cloudflare, as it's a node-only API. Technically it should be poyfilled by unenv, but there seems to be an issue preventing this. As a work-around, in our project we are currently patching the respective code in the graphql module.
pnpm patch graphql
code <generated_folder>
In node_modules/graphql/jsutils/instanceOf.mjs
remove the code that tries to access process
.
export const instanceOf = function instanceOf(value, constructor) {
return value instanceof constructor
}
Apply the patch.
pnpm patch-commit <generated_folder>
The resulting patch should appear in package.json to be applied during deployment on Cloudflare.
"pnpm": {
"patchedDependencies": {
"[email protected]": "patches/[email protected]"
}
}
Any updates on the fix ? I was checking the PR but that also doesnt seem to have merged.
Bumping this...
UP
UP
It appears this is still not fixed. I just ran into it the last few days. Any word on when it'll get fixed?
https://github.com/graphql/graphql-js/pull/4022 seems close to ready.
This is fixed in https://github.com/graphql/graphql-js/pull/4022 and published in GraphQL 16.8.2, you can find the instructions for various bundlers here on how to remove it in production.