Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error: Cannot find module 'graphql' (is graphql mandatory?) #38

Closed
jeremyhalin opened this issue Mar 28, 2021 · 17 comments
Closed

Error: Cannot find module 'graphql' (is graphql mandatory?) #38

jeremyhalin opened this issue Mar 28, 2021 · 17 comments

Comments

@jeremyhalin
Copy link

I installed nestjs-sentry package, but it seems that graphql is a mandatory package to have as a dependency.
I've seen in the README something about Interceptors but I'm not sure if I understood it.

app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AuthModule } from './auth/auth.module';
import { UsersModule } from './users/users.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { getConnectionOptions } from 'typeorm';
import { LevelsModule } from './levels/levels.module';
import { MoviesModule } from './movies/movies.module';
import { LevelsQuotesModule } from './levels-quotes/levels-quotes.module';
import { UsersProgressesModule } from './users-progresses/users-progresses.module';
import { ProductsModule } from './products/products.module';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { LeaderboardsModule } from './leaderboards/leaderboards.module';
import { SentryModule } from '@ntegral/nestjs-sentry';
import { LogLevel } from '@sentry/types';

@Module({
  imports: [
    SentryModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: async (cfg: ConfigService) => ({
        dsn: cfg.get('SENTRY_DSN'),
        debug: false,
        environment: process.env.NODE_ENV,
        release: null, // must create a release in sentry.io dashboard
        logLevel: LogLevel.Debug, //based on sentry.io loglevel //
      }),
      inject: [ConfigService],
    }),
    ConfigModule.forRoot(),
    TypeOrmModule.forRootAsync({
      useFactory: async () =>
        Object.assign(await getConnectionOptions(), {
          autoLoadEntities: true,
        }),
    }),
    AuthModule,
    UsersModule,
    LevelsModule,
    MoviesModule,
    LevelsQuotesModule,
    UsersProgressesModule,
    ProductsModule,
    LeaderboardsModule,
  ],
  controllers: [AppController],
})
export class AppModule {}

logs

[18:58:29] Found 0 errors. Watching for file changes.

internal/modules/cjs/loader.js:775
    throw err;
    ^

Error: Cannot find module 'graphql'
Require stack:
- C:\Users\Jeremy\www\memorable-nest-api\node_modules\@nestjs\graphql\dist\decorators\directive.decorator.js
- C:\Users\Jeremy\www\memorable-nest-api\node_modules\@nestjs\graphql\dist\decorators\index.js
- C:\Users\Jeremy\www\memorable-nest-api\node_modules\@nestjs\graphql\dist\index.js
- C:\Users\Jeremy\www\memorable-nest-api\node_modules\@nestjs\graphql\index.js
- C:\Users\Jeremy\www\memorable-nest-api\node_modules\@ntegral\nestjs-sentry\dist\graphql.interceptor.js
- C:\Users\Jeremy\www\memorable-nest-api\node_modules\@ntegral\nestjs-sentry\dist\index.js
- C:\Users\Jeremy\www\memorable-nest-api\dist\app.module.js
- C:\Users\Jeremy\www\memorable-nest-api\dist\main.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:772:15)
    at Function.Module._load (internal/modules/cjs/loader.js:677:27)
    at Module.require (internal/modules/cjs/loader.js:830:19)
    at require (internal/modules/cjs/helpers.js:68:18)
    at Object.<anonymous> (C:\Users\Jeremy\www\memorable-nest-api\node_modules\@nestjs\graphql\dist\decorators\directive.
decorator.js:4:19)
    at Module._compile (internal/modules/cjs/loader.js:936:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:947:10)
    at Module.load (internal/modules/cjs/loader.js:790:32)
    at Function.Module._load (internal/modules/cjs/loader.js:703:12)
    at Module.require (internal/modules/cjs/loader.js:830:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    'C:\\Users\\Jeremy\\www\\memorable-nest-api\\node_modules\\@nestjs\\graphql\\dist\\decorators\\directive.decorator.js
',
    'C:\\Users\\Jeremy\\www\\memorable-nest-api\\node_modules\\@nestjs\\graphql\\dist\\decorators\\index.js',
    'C:\\Users\\Jeremy\\www\\memorable-nest-api\\node_modules\\@nestjs\\graphql\\dist\\index.js',
    'C:\\Users\\Jeremy\\www\\memorable-nest-api\\node_modules\\@nestjs\\graphql\\index.js',
    'C:\\Users\\Jeremy\\www\\memorable-nest-api\\node_modules\\@ntegral\\nestjs-sentry\\dist\\graphql.interceptor.js',
    'C:\\Users\\Jeremy\\www\\memorable-nest-api\\node_modules\\@ntegral\\nestjs-sentry\\dist\\index.js',
    'C:\\Users\\Jeremy\\www\\memorable-nest-api\\dist\\app.module.js',
    'C:\\Users\\Jeremy\\www\\memorable-nest-api\\dist\\main.js'
  ]
}
package.json
{
  "name": "memorable-nest-api",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "prebuild": "rimraf dist",
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^7.6.13",
    "@nestjs/config": "^0.6.3",
    "@nestjs/core": "^7.6.13",
    "@nestjs/jwt": "^7.2.0",
    "@nestjs/passport": "^7.1.5",
    "@nestjs/platform-express": "^7.6.13",
    "@nestjs/swagger": "^4.8.0",
    "@nestjs/typeorm": "^7.1.5",
    "@nestjsx/crud": "^5.0.0-alpha.3",
    "@nestjsx/crud-typeorm": "^5.0.0-alpha.3",
    "@ntegral/nestjs-sentry": "^2.0.6",
    "@sentry/node": "^6.2.3",
    "@types/node-fetch": "^2.5.8",
    "class-transformer": "^0.4.0",
    "class-validator": "^0.13.1",
    "google-auth-library": "^7.0.2",
    "http-status-codes": "^2.1.4",
    "mysql2": "^2.2.5",
    "passport": "^0.4.1",
    "passport-jwt": "^4.0.0",
    "passport-local": "^1.0.0",
    "reflect-metadata": "^0.1.13",
    "rimraf": "^3.0.2",
    "rxjs": "^6.6.6",
    "typeorm": "^0.2.31"
  },
  "devDependencies": {
    "@nestjs/cli": "^7.5.6",
    "@nestjs/schematics": "^7.2.7",
    "@nestjs/testing": "^7.6.13",
    "@types/express": "^4.17.11",
    "@types/jest": "^26.0.20",
    "@types/node": "^14.14.31",
    "@types/passport-jwt": "^3.0.5",
    "@types/passport-local": "^1.0.33",
    "@types/supertest": "^2.0.10",
    "@typescript-eslint/eslint-plugin": "^4.15.2",
    "@typescript-eslint/parser": "^4.15.2",
    "eslint": "^7.20.0",
    "eslint-config-prettier": "^8.1.0",
    "eslint-plugin-prettier": "^3.3.1",
    "jest": "^26.6.3",
    "prettier": "^2.2.1",
    "supertest": "^6.1.3",
    "ts-jest": "^26.5.2",
    "ts-loader": "^8.0.17",
    "ts-node": "^9.1.1",
    "tsconfig-paths": "^3.9.0",
    "typescript": "^4.1.5"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}
@stiboost
Copy link

Looks like the library is exporting everything in the index.ts file, therefore the import statements in the graphql.interceptor gets evaulated.

@ntegral
Copy link
Owner

ntegral commented Apr 6, 2021

I'll take a look at this. Thanks

@nicobytes
Copy link

nicobytes commented Apr 6, 2021

I have the same issue just use the SentryInterceptor, like that

 app.useGlobalInterceptors(new SentryInterceptor());

and my module:

SentryModule.forRootAsync({
    imports: [ConfigModule],
    useFactory: async (configService: ConfigType<typeof config>) => {
      return {
        dsn: configService.sentryKey,
        debug: true,
        environment: configService.env,
        enabled: configService.env === 'production',
        logLevel: LogLevel.Debug,
      };
    },
    inject: [config.KEY],
  }),

but show error because don't have @nestjs/graphql, I'm working w/ @ntegral/nestjs-sentry 2.0.6

@jeremyhalin
Copy link
Author

I failed to get this package to work out of the box, so I now use nest-raven.
Works like a charm.

@ntegral
Copy link
Owner

ntegral commented May 11, 2021

graphql is not a required module for this version of the npm package when using the SentryInterceptor?? I can not replicate your issue??

see the link to the sample application using the package.

@ntegral
Copy link
Owner

ntegral commented May 11, 2021

@module({
imports: [
ConfigModule.forRoot(),
SentryModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (cfg:ConfigService) => ({
dsn: cfg.get('SENTRY_DSN'),
debug: true,
environment: 'dev',
release: null, // must create a release in sentry.io dashboard
logLevel: LogLevel.Debug //based on sentry.io loglevel //
}),
inject: [ConfigService],
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}

@ntegral ntegral closed this as completed May 11, 2021
@adamtester
Copy link

Hello! Ran npm install and my integration stopped working

FAIL test/e2e/legacy/verify.e2e-spec.ts
  ● Test suite failed to run
    Cannot find module '@nestjs/graphql' from '../../node_modules/@ntegral/nestjs-sentry/dist/graphql.interceptor.js'
    Require stack:
      /home/runner/work/.../node_modules/@ntegral/nestjs-sentry/dist/graphql.interceptor.js
      /home/runner/work/.../node_modules/@ntegral/nestjs-sentry/dist/index.js
      /home/runner/work/../src/app.module.ts
      legacy/verify.e2e-spec.ts
      at Resolver.resolveModule (../../node_modules/jest-resolve/build/index.js:306:11)
      at Object.<anonymous> (../../../../../../../graphql.interceptor.ts:12:3)
  imports: [
    ConfigModule.forRoot({ cache: true }),
    SentryModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => ({
        dsn: configService.get('SENTRY_URL'),
        environment: configService.get('ENVIRONMENT'),
      }),
      inject: [ConfigService],
    }),
    TokenModule,
  ],

@adamtester
Copy link

Looks like this is an issue with npm 7
image

@ntegral
Copy link
Owner

ntegral commented May 11, 2021

I've tested the module using npm 7.11.2. I have not gotten the error or been able to replicate it? Would you clone the sample nest application to see if you are able to replicate this error?

https://github.com/ntegral/nestjs-sentry-example

@ntegral
Copy link
Owner

ntegral commented May 11, 2021

@adamtester
I've tested the module using npm 7.11.2. I have not gotten the error or been able to replicate it? Would you clone the sample nest application to see if you are able to replicate this error?

https://github.com/ntegral/nestjs-sentry-example

@adamtester
Copy link

@ntegral yep I'll give it a go tomorrow and report back!

@vladi-strilets
Copy link

@ntegral
Hi, I have the same issue.
I have cloned your example repo, just git clone, yarn, yarn start and.. Error: Cannot find module 'graphql'

node v12.21.0
yarn 1.22.10
OS: Ubuntu 20.04

@cerireyhan
Copy link

Could we at least re-open the issue? It's reproducible.

@ntegral ntegral reopened this May 21, 2021
@ntegral
Copy link
Owner

ntegral commented May 21, 2021

Please update to the latest version of the module 2.0.7 @cerireyhan @vladi-strilets @adamtester

@ntegral
Copy link
Owner

ntegral commented May 21, 2021

If you are using the GraphQLInterceptor, you will have to install graphQL

@vladi-strilets
Copy link

@ntegral I can confirm that after update to 2.0.07 it works

@ntegral
Copy link
Owner

ntegral commented May 24, 2021

@vladi-strilets Thanks for letting me know. With that confirmation, I'll go ahead and close this issue.

@ntegral ntegral closed this as completed May 24, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants