Webpack tree shaking - 删除名为 Entity 的导出
Webpack tree shaking - removes export called Entity
我偶然发现了一个非常奇怪的名字问题。我正在尝试在使用 webpack 构建和编译应用程序的 Ionic 应用程序中使用 TypeScript 库 (TypeORM)。
TypeORM 具有实体装饰器,称为 Entity
、AbstractEntity
等。当我导入和使用 Entity
装饰器时,它没有被标记为由 webpack 使用。当我切换到 AbstractEntity
时,它被标记为已使用。每个其他装饰器都被标记为已使用。
这个打字稿class
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
user_id_internal: number;
@Column({unique: true})
user_id: string;
@Column()
first_name: string;
@Column()
last_name: string;
}
翻译成
var User = (function () {
function User() {
}
return User;
}());
__decorate([
Object(__WEBPACK_IMPORTED_MODULE_0_typeorm__["f" /* PrimaryGeneratedColumn */])(),
__metadata("design:type", Number)
], User.prototype, "user_id_internal", void 0);
__decorate([
Object(__WEBPACK_IMPORTED_MODULE_0_typeorm__["a" /* Column */])({ unique: true }),
__metadata("design:type", String)
], User.prototype, "user_id", void 0);
__decorate([
Object(__WEBPACK_IMPORTED_MODULE_0_typeorm__["a" /* Column */])(),
__metadata("design:type", String)
], User.prototype, "first_name", void 0);
__decorate([
Object(__WEBPACK_IMPORTED_MODULE_0_typeorm__["a" /* Column */])(),
__metadata("design:type", String)
], User.prototype, "last_name", void 0);
User = __decorate([
Object(__WEBPACK_IMPORTED_MODULE_0_typeorm__["b" /* Entity */])()
], User);
但是 Entity
被标记为未使用
// index.ts imports
/* unused harmony namespace reexport */
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__decorator_entities_Entity__ = __webpack_require__(382);
// Entity.ts exports
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(4);
/* unused harmony export Entity */
但是当我将 Entity
更改为 AbstractEntity
时被标记为已使用
// index.ts
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__decorator_entities_AbstractEntity__ = __webpack_require__(555);
/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_32__decorator_entities_AbstractEntity__["a"]; });
// AbstractEntity.ts
/* harmony export (immutable) */ __webpack_exports__["a"] = AbstractEntity;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(4);
关于原因有什么想法吗?
事实证明,Entity
在主要打字稿文件中导出了两次。编译器没有抱怨,但 webpack 似乎有问题。删除第二个导出解决了问题。
我偶然发现了一个非常奇怪的名字问题。我正在尝试在使用 webpack 构建和编译应用程序的 Ionic 应用程序中使用 TypeScript 库 (TypeORM)。
TypeORM 具有实体装饰器,称为 Entity
、AbstractEntity
等。当我导入和使用 Entity
装饰器时,它没有被标记为由 webpack 使用。当我切换到 AbstractEntity
时,它被标记为已使用。每个其他装饰器都被标记为已使用。
这个打字稿class
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
user_id_internal: number;
@Column({unique: true})
user_id: string;
@Column()
first_name: string;
@Column()
last_name: string;
}
翻译成
var User = (function () {
function User() {
}
return User;
}());
__decorate([
Object(__WEBPACK_IMPORTED_MODULE_0_typeorm__["f" /* PrimaryGeneratedColumn */])(),
__metadata("design:type", Number)
], User.prototype, "user_id_internal", void 0);
__decorate([
Object(__WEBPACK_IMPORTED_MODULE_0_typeorm__["a" /* Column */])({ unique: true }),
__metadata("design:type", String)
], User.prototype, "user_id", void 0);
__decorate([
Object(__WEBPACK_IMPORTED_MODULE_0_typeorm__["a" /* Column */])(),
__metadata("design:type", String)
], User.prototype, "first_name", void 0);
__decorate([
Object(__WEBPACK_IMPORTED_MODULE_0_typeorm__["a" /* Column */])(),
__metadata("design:type", String)
], User.prototype, "last_name", void 0);
User = __decorate([
Object(__WEBPACK_IMPORTED_MODULE_0_typeorm__["b" /* Entity */])()
], User);
但是 Entity
被标记为未使用
// index.ts imports
/* unused harmony namespace reexport */
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__decorator_entities_Entity__ = __webpack_require__(382);
// Entity.ts exports
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(4);
/* unused harmony export Entity */
但是当我将 Entity
更改为 AbstractEntity
时被标记为已使用
// index.ts
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__decorator_entities_AbstractEntity__ = __webpack_require__(555);
/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_32__decorator_entities_AbstractEntity__["a"]; });
// AbstractEntity.ts
/* harmony export (immutable) */ __webpack_exports__["a"] = AbstractEntity;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(4);
关于原因有什么想法吗?
事实证明,Entity
在主要打字稿文件中导出了两次。编译器没有抱怨,但 webpack 似乎有问题。删除第二个导出解决了问题。