【问题标题】:Nestjs application can not run after bundled with webpack与 webpack 捆绑后 Nestjs 应用程序无法运行
【发布时间】:2021-03-13 03:10:38
【问题描述】:

我有一个 nestjs 应用程序,我使用 webpack 将整个项目捆绑到一个 main.js 文件中。我的 webpack 配置文件刚刚通过 this repo 流动,但是当我运行 npm run 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/核心版本:7.0.0

webpack-cli 版本:4.2.0

我的 webpack 配置

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
    ]
  }
};

那么谁能告诉我为什么会出现这个错误?

【问题讨论】:

    标签: typescript webpack bundle nestjs


    【解决方案1】:

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

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

    至于发生的原因,Nest.js 文档只是提到:

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

    .

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 1970-01-01
      • 2022-06-18
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      • 2017-10-15
      • 2012-01-15
      • 2012-04-14
      相关资源
      最近更新 更多