Typescript Nestjs应用程序与webpack捆绑后无法运行

Typescript Nestjs应用程序与webpack捆绑后无法运行,typescript,webpack,bundle,nestjs,Typescript,Webpack,Bundle,Nestjs,我有一个nestjs应用程序,我使用webpack将整个项目捆绑到main.js文件中。我的webpack配置文件刚刚经过,但当我运行npm运行build:prod将main.js绑定到dist/main.js并运行node main.js时,它有时会抛出一个我从未见过的错误 像这样: throw new errors_1.CannotDetermineTypeError((_a = target.constructor) === null || _a === void 0 ? void 0 :

我有一个nestjs应用程序,我使用webpack将整个项目捆绑到main.js文件中。我的webpack配置文件刚刚经过,但当我运行
npm运行build:prod
将main.js绑定到dist/main.js并运行
node main.js
时,它有时会抛出一个我从未见过的错误

像这样:

throw new errors_1.CannotDetermineTypeError((_a = target.constructor) === null || _a === void 0 ? void 0 : _a.name, propertyKey);
                ^
CannotDetermineTypeError: Cannot determine a type for the "n.operation" field (union/intersection/ambiguous type was used). Make sure your property is decorated with a "@Prop({ type: TYPE_HERE })" decorator.
nodejs版本:v12.18.4

nestjs/core版本:7.0.0

webpack cli版本:4.2.0

我的网页包配置

const path = require('path');
const webpack = require('webpack');
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');

const { NODE_ENV = 'none' } = process.env;

console.log(`-- Webpack <${NODE_ENV}> build --`);

module.exports = {
  entry: './src/main.ts',
  mode: NODE_ENV,
  target: 'node',
  plugins: [
    new webpack.IgnorePlugin({
      checkResource(resource) {
        const lazyImports = [
          '@nestjs/microservices',
          '@nestjs/platform-express',
          'cache-manager',
          'class-validator',
          'class-transformer'
        ];
        if (!lazyImports.includes(resource)) {
          return false;
        }
        try {
          require.resolve(resource);
        } catch (err) {
          return true;
        }
        return false;
      }
    })
  ],
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js'
  },
  resolve: {
    extensions: ['.ts', '.js'],
    plugins: [new TsconfigPathsPlugin({ configFile: './tsconfig.build.json' })]
  },
  module: {
    rules: [{ test: /\.ts$/, loader: 'ts-loader' }]
  },
  stats: {
    warningsFilter: [
      'node_modules/express/lib/view.js',
      'node_modules/@nestjs/common/utils/load-package.util.js',
      'node_modules/@nestjs/core/helpers/load-adapter.js',
      'node_modules/mongoose/lib/index.js',
      'node_modules/mqtt/node_modules/ws/lib/buffer-util.js',
      'node_modules/mqtt/node_modules/ws/lib/validation.js',
      'node_modules/mongodb/lib/operations/connect.js',
      'node_modules/grpc/src/grpc_extension.js',
      'node_modules/bytebuffer/dist/bytebuffer-node.js',
      'node_modules/@nestjs/core/helpers/optional-require.js',
      'node_modules/require_optional/index.js',
      'node_modules/node-pre-gyp/lib/util/versioning.js',
      'node_modules/node-pre-gyp/lib/pre-binding.js',
      'node_modules/ws/lib/buffer-util.js',
      'node_modules/ws/lib/validation.js',
      warning => false
    ]
  }
};
const path=require('path');
const webpack=require('webpack');
const tsconfig-pathsplugin=require('tsconfig-path-webpack-plugin');
const{NODE_ENV='none'}=process.ENV;
log(`--Webpack build--`);
module.exports={
条目:'./src/main.ts',
模式:NODE_ENV,
目标:'节点',
插件:[
新建webpack.IgnorePlugin({
检查资源(资源){
常数懒散=[
“@nestjs/microservices”,
“@nestjs/platform express”,
“缓存管理器”,
“类验证程序”,
“类变压器”
];
如果(!lazyImports.includes(资源)){
返回false;
}
试一试{
要求、解决(资源);
}捕捉(错误){
返回true;
}
返回false;
}
})
],
输出:{
path:path.resolve(uu dirname,'dist'),
文件名:'main.js'
},
决心:{
扩展名:['.ts','.js'],
插件:[new tsconfig.pathsplugin({configFile:'./tsconfig.build.json'}]
},
模块:{
规则:[{test:/\.ts$/,loader:'ts loader'}]
},
统计数据:{
警告过滤器:[
'node_modules/express/lib/view.js',
'node_modules/@nestjs/common/utils/load package.util.js',
'node_modules/@nestjs/core/helpers/load adapter.js',
'node_modules/mongoose/lib/index.js',
'node_modules/mqtt/node_modules/ws/lib/buffer util.js',
'node_modules/mqtt/node_modules/ws/lib/validation.js',
'node_modules/mongodb/lib/operations/connect.js',
“node_modules/grpc/src/grpc_extension.js”,
'node_modules/bytebuffer/dist/bytebuffer node.js',
'node_modules/@nestjs/core/helpers/optional require.js',
“node_modules/require_optional/index.js”,
'node_modules/node pre-gyp/lib/util/versioning.js',
'node_modules/node pre-gyp/lib/pre-binding.js',
'node_modules/ws/lib/buffer util.js',
'node_modules/ws/lib/validation.js',
警告=>错误
]
}
};

有人能告诉我为什么会出现这个错误吗?

对于Mongoose对象模型中的属性,我遇到了这个问题,这些属性没有在Nest的@Prop注释中显式声明其类型。它必须是一个类,而不是一个接口。 像这样:

至于发生这种情况的原因,Nest.js doc只是提到:

“将自动推断这些属性的架构类型 感谢TypeScript元数据(和反射)功能, 在更复杂的场景中,类型不能隐式 反射(例如,数组或嵌套对象结构)、类型 必须明确指出“

class InnerPropExample {
    name: string
}

@Schema()
export class MongooseModelExample extends Document {
  @Prop(InnerPropExample)
  innerPropExample: InnerPropExample;
}