graphql-tag icon indicating copy to clipboard operation
graphql-tag copied to clipboard

SyntaxError: Unexpected identifier

Open akoskm opened this issue 2 years ago • 9 comments

I'm trying to import a .graphql file in a file called main.ts.

I set up the webpack loader according to the readme file https://github.com/apollographql/graphql-tag#webpack-loading-and-preprocessing

Here's how the file is imported:

import ProjectsQuery from '../graphql/query/ProjectsQuery.graphql';

and the error I'm getting:

/Users/akoskm/Projects/sprcalc-electron/src/graphql/query/ProjectsQuery.gql:1
query ProjectsQuery {
      ^^^^^^^^^^^^^

SyntaxError: Unexpected identifier
    at Object.compileFunction (node:vm:352:18)
    at wrapSafe (node:internal/modules/cjs/loader:1032:15)
    at Module._compile (node:internal/modules/cjs/loader:1066:27)
    at Module._extensions..js (node:internal/modules/cjs/loader:1140:10)
    at Object.require.extensions.<computed> [as .js] (/Users/akoskm/Projects/sprcalc-electron/node_modules/ts-node/src/index.ts:1361:43)
    at Module.load (node:internal/modules/cjs/loader:982:32)
    at Module._load (node:internal/modules/cjs/loader:823:12)
    at Function.c._load (node:electron/js2c/asar_bundle:5:13331)
    at Module.require (node:internal/modules/cjs/loader:1006:19)
    at require (node:internal/modules/cjs/helpers:93:18)
ERROR in /Users/akoskm/Projects/sprcalc-electron/src/main/main.ts

The relevant part of my webpack configuration:

export default {
  externals: [...Object.keys(externals || {})],

  stats: 'errors-only',

  module: {
    rules: [
      {
        test: /\.(graphql|gql)$/,
        exclude: /node_modules/,
        loader: 'graphql-tag/loader',
      },
      {
        test: /\.[jt]sx?$/,
        exclude: /node_modules/,
        use: {
          loader: 'ts-loader',
        },
      },
    ],
  },

  output: {
    path: webpackPaths.srcPath,
    // https://github.com/webpack/webpack/issues/1114
    library: {
      type: 'commonjs2',
    },
  },

  /**
   * Determine the array of extensions that should be used to resolve modules.
   */
  resolve: {
    extensions: ['.js', '.jsx', '.json', '.ts', '.tsx', '.graphql', '.gql'],
    modules: [webpackPaths.srcPath, 'node_modules'],
  },

  plugins: [
    new webpack.EnvironmentPlugin({
      NODE_ENV: 'production',
    }),

    new webpack.ProvidePlugin({
      $: 'jquery',
      'window.$': 'jquery',
      jquery: 'jquery',
      jQuery: 'jquery',
      'window.jQuery': 'jquery',
      draw2d: 'draw2d',
    }),
  ],
};

and here's the query:

query ProjectsQuery {
  projects {
    id
    name
    description
    project_phases {
      id
      description
      start_date
      completion_date
    }
  }
}

akoskm avatar Mar 26 '22 07:03 akoskm

@akoskm Were you able to solve this problem?

Isomorpheus avatar Jan 17 '23 13:01 Isomorpheus

@Isomorpheus no, I didn't work on this. This is still an open issue in our project.

I will update you once we have a solution.

akoskm avatar Jan 18 '23 14:01 akoskm

@akoskm Were you able to solve this problem?

juancampuzano avatar May 12 '23 07:05 juancampuzano

@juancampuzano see my comment above.

akoskm avatar May 12 '23 07:05 akoskm

I was facing the same issue and I solved it by using this library - https://github.com/evenchange4/graphql.macro

BhavinPatel04 avatar Sep 13 '23 23:09 BhavinPatel04

Hey @akoskm 👋

Would you be able to create a minimal, runnable reproduction of this issue? The webpack loader typically works well, so it would be helpful to understand if this issue is related to the way you've set up your project, or if there is some other change we need to be aware of in the library itself. Thanks!

jerelmiller avatar Oct 03 '23 17:10 jerelmiller

I'm facing this issue as well. If i put the .graphql file content directly inside the template literal tag gql there will be no problem. But as soon as I put them in a separate .graphql file the error SyntaxError: Unexpected identifier will be shown.

HoseinGhanbari avatar Nov 16 '23 13:11 HoseinGhanbari

I was facing the same issue and I solved it by using this library - https://github.com/evenchange4/graphql.macro

Could you explain how were you able to solve the problem by using graphql.macro ?

@BhavinPatel04

HoseinGhanbari avatar Nov 16 '23 13:11 HoseinGhanbari

Fortunately, a solution found by using graphql-import-node

https://github.com/ardatan/graphql-import-node

  1. this is how api-extensions.graphql.ts look like where you are importing .graphql
import gql from 'graphql-tag';
import 'graphql-import-node';

import q1 from "./q1-customizations.graphql";

export const commonApiExtensions = gql`
  ${q1}
`;
  1. this is how dev mode npm script can be write
ts-node -r graphql-import-node/register ./src/index.ts

OR

node-dev -r graphql-import-node/register ./src/index.ts

HoseinGhanbari avatar Nov 16 '23 14:11 HoseinGhanbari