NestJS GraphQL Webpack 生产环境构建错误

3

当我使用Webpack进行生产环境构建时,我遇到了模式类型错误。错误信息是:"Error while boostrapping Schema must contain uniquely named types but contains multiple types named "s""。

仅在生产构建中出现此问题,而开发构建正常工作。

这是我的解析器:

@Resolver()
export class UserResolver {
    constructor(private readonly userService: UserService) {}

    @Query(() => User)
    public async getAll(@Parent() {id}): Promise<any> {
        return await this.userService.findUsers(id);
    }

    @Mutation(() => ResponseMessage)
    public async registerUser(@Args('registerUser') registerUser: RegisterUserInput): Promise<ResponseMessage> {
        return await this.userService.register(registerUser);
    }

    @Mutation(() => User)
    public async updateUser(@Args('updateUser') updateUser: UpdateUserInput): Promise<User> {
        return await this.userService.update(updateUser);
    }
}

去掉@Mutation(),只保留@Query,编译正常,应用程序已构建。我正在使用autoSchemaFile生成模式文件。


通过在我的webpack配置中添加以下内容解决了这个问题: minimize: false, namedModules: true, namedChunks: true, moduleIds: "named" },``` 不对构建进行最小化处理解决了这个问题。 - undefined
2个回答

1

Webpack的生产模式会自动启用代码压缩。默认情况下,这会更改类和函数名称。如果您正在使用NestJS GraphQL schema,则特别容易出现问题。

您可以调整nestjs webpack的压缩配置,使用TerserPlugin来配置压缩设置以保留函数和类名称。

请参阅此处的文档。

以下是在webpack.config.js文件中为NestJS实现此功能的示例。

const TerserPlugin = require('terser-webpack-plugin');

...

  optimization: {
    minimize: true,
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          keep_classnames: true,
          keep_fnames: true,
        },
      }),
    ],
  },

...

0

以下代码将会起作用。我不知道为什么在 NestJS 的生产模式下 minimize: true 不起作用。

optimization: {
    minimize: false,  
},

我也不知道,但这个有帮助! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接