[英]Nestjs application can not run after bundled with webpack
我有一个 nestjs 应用程序,我使用 webpack 将整个项目捆绑到一个 main.js 文件中。 我的 webpack 配置文件刚刚通过这个 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.
节点版本: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
]
}
};
那么有人可以告诉我为什么我有这个错误吗?
对于 ZCCADCDEDB567ABAE643E15DCF0974E503Z object 模型中的属性,我遇到了这个问题,这些模型没有在 Nest 的 @Prop 注释中明确声明其类型。 而且必须是class,不是接口。 像这样:
class InnerPropExample {
name: string
}
@Schema()
export class MongooseModelExample extends Document {
@Prop(InnerPropExample)
innerPropExample: InnerPropExample;
}
至于它发生的原因,Nest.js 文档只是提到:
“借助 TypeScript 元数据(和反射)功能,可以自动推断这些属性的模式类型。但是,在无法隐式反映类型的更复杂的场景中(例如,必须显式指示 arrays 或嵌套的 ZA8CFDE63types31BD59EB2AC96F8 结构)”91
.
我也有这个问题,我用那个提示修复它@Prop({ type: TYPE_HERE })
。 像这样:
interface MassageContent {
txt?: string
}
@Prop({ require: true, type: Object })
content: MassageContent;
它比将接口更改为 class 更好
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.