у нас есть файл webapck, подобный следующему:
const $ = require('./helpers');
const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
const copyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
target: 'node',
entry: {
exmp_tenant_add: $.root('./src/bmcl_auth_tenant_get/index.ts'),
bmcl_auth_user_get: $.root('./src/func_user_get/index.ts'),
...
)
},
externals: {
sqlite3: 'commonjs sqlite3',
typeorm: 'commonjs typeorm'
},
output: {
path: $.root('dist'),
filename: '[name]/[name].js',
libraryTarget: 'commonjs2'
},
module: {
rules: [
{
test: /\.ts$/,
use: 'awesome-typescript-loader?declaration=false',
exclude: [/\.(spec|e2e)\.ts$/]
}
]
},
resolve: {
extensions: ['.ts', '.js', '.json'],
modules: ['node_modules', 'src']
},
plugins: [
new webpack.IgnorePlugin(/^pg-native$/),
new TerserPlugin({
parallel: true,
terserOptions: {
ecma: 6
}
}),
new copyWebpackPlugin([
{
from: 'src/host.json',
to: 'host.json'
},
{
context: 'src',
from: '**/function.json',
to: ''
}
])
],
node: {
__filename: false,
__dirname: false
}
};
и класс сущности
@Entity('user_master')
export class User {
@IsUUID()
@Column('uuid', {
nullable: false,
primary: true,
name: 'user_id'
})
// tslint:disable-next-line: variable-name
user_id: string;
@IsNotEmpty()
@IsEmail()
@Column('character varying', {
nullable: false,
length: 50,
name: 'email'
})
// tslint:disable-next-line: variable-name
email: string;
@Column('boolean', {
nullable: true,
name: 'is_deleted'
})
// tslint:disable-next-line: variable-name
is_deleted: boolean | null;
@OneToMany(
type => UserTenantMapping,
(userTenantMapping: UserTenantMapping) => userTenantMapping.user,
{ nullable: true }
)
userTenantMappings?: Promise<UserTenantMapping[]>;
another entity
@Entity('user_tenant_mapping')
export class UserTenantMapping {
@IsUUID()
@Column('uuid', {
nullable: false,
primary: true,
name: 'mapping_id'
})
// tslint:disable-next-line: variable-name
mapping_id: string;
@Column('uuid', {
nullable: false,
name: 'user_id'
})
// tslint:disable-next-line: variable-name
user_id: string;
@IsUUID()
@Column('uuid', {
nullable: false,
name: 'tenant_id'
})
// tslint:disable-next-line: variable-name
tenant_id: string;
@Column('boolean', {
nullable: true,
name: 'is_active'
})
// tslint:disable-next-line: variable-name
is_active: boolean | null;
@Column('boolean', {
nullable: true,
name: 'is_deleted'
})
// tslint:disable-next-line: variable-name
is_deleted: boolean | null;
@ManyToOne(type => User, user => user.userTenantMappings)
@JoinColumn({ name: 'user_id' })
user?: User;
}
, когда я запускаю этот код в сравнении с кодом, он работает нормально, генерирует правильный sql, но с Веб-пакет, который мы используем для производственной сборки, генерирует запрос следующим образом:
SELECT "user_master". "mapping_id" AS "user_master_mapping_id", "user_master". "user_id" AS "user_master_user_id", "user_master". "tenant_id" AS "user_master_tenant_id", "user_master". "Is_active" AS "user_master_is_active", "user_master". "Is_deleted" AS "user_master_is_deleted" ИЗ "user_tenant_mapping" "user_master" WHERE "user_master". "Is_deleted" = 'false' * 9
он выбирает из реляционной таблицы, где, как и при запуске в отладке, он генерирует sql, что является правильным:
SELECT "user_master"."user_id" AS "user_master_user_id", "user_master"."email" AS "user_master_email", "user_master"."is_deleted" AS "user_master_is_deleted" FROM "user_master" "user_master" WHERE "user_master"."is_deleted" = 'false'
Почему typeorm генерирует имя таблицы запросов: "FROM" user_tenant_mapping "" user_master ""?