typescript - 与webpack bundle 后,Nestjs应用程序无法运行

标签 typescript webpack bundle nestjs

我有一个 nestjs 应用程序,我使用 webpack 将整个项目 bundle 到一个 main.js 文件中。我的 webpack 配置文件刚刚流过 this repo ,但是当我运行 npm run build:prod 将 main.js bundle 到 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
    ]
  }
};

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

最佳答案

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

class InnerPropExample {
    name: string
}

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

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

"The schema types for these properties are automatically inferred thanks to TypeScript metadata (and reflection) capabilities. However, in more complex scenarios in which types cannot be implicitly reflected (for example, arrays or nested object structures), types must be indicated explicitly"

.

关于typescript - 与webpack bundle 后,Nestjs应用程序无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65086398/

相关文章:

typescript - 可观察类型上不存在 mergeMap

angular - NullInjectorError : No provider for DecimalPipe

angular - 如何在 npm 上发布 angular 2 typescript 库

javascript - Babel 不转译从 'node_modules' 导入的模块

objective-c - 如何在 cocoa 中创建和使用 bundle ?

javascript - 使用装饰器将类方法附加到窗口对象

javascript - 在React项目中, "this"转换为 "undefined"

reactjs - React、Webpack、Stylus - 将全局变量导入到所有组件

iphone - NSInternalInconsistencyException - 无法加载 bundle : 中的 NIB

Swift:确定给定的包是否是应用程序?