NestJS Graphql webpack生产构建错误

izj3ouym  于 2022-11-24  发布在  Webpack
关注(0)|答案(2)|浏览(160)

在生产环境中使用Webpack构建项目时遇到架构类型错误。错误:启动时出错架构必须包含唯一命名得类型,但却包含多个名为得类型
这种情况仅在使用生产构建时发生,而开发构建工作正常。
这是我的解析器:

@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生成模式文件。

iqxoj9l9

iqxoj9l91#

我不知道为什么minimize: true不能在生产模式下为NestJS工作。

optimization: {
    minimize: false,  
},
irtuqstp

irtuqstp2#

webpack的生产模式自动启用缩小。默认情况下,这会更改类和函数名。如果您正在使用NestJS GraphQL架构,这尤其是一个问题。
您可以调整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,
        },
      }),
    ],
  },

...

相关问题