我有一个 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/