2017-09-07 3 views
0

Je suis tombé sur un problème de nom très étrange. J'essaie d'utiliser une bibliothèque TypeScript (TypeORM) dans une application Ionic qui utilise webpack pour construire et compiler l'application.Webpack secouant l'arbre - supprime l'exportation Entité Entité

TypeORM a des décorateurs pour Entités appelés Entity, AbstractEntity et autres. Lorsque j'importe et utilise le décorateur Entity, il n'est pas marqué comme utilisé par webpack. Quand je passe au AbstractEntity, il est marqué comme utilisé. Tous les autres décorateurs sont marqués comme utilisés.

Cette classe Tapuscrit

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; 
} 

est traduit en

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); 

mais Entity est marqué comme utilisé

// 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 */ 

mais quand je change Entity-AbstractEntity est marqué comme utilisé

// 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); 

Des idées sur pourquoi?

+0

Leurs docs disent que vous devez passer en es6 et que uglifyjs ne supporte pas l'harmonie. Avez-vous installé git: //github.com/mishoo/UglifyJS2#harmony dans des scripts d'application ionique? – misha130

+0

Leurs documents sont les docs de webpack? Je n'ai modifié aucun des paramètres des scripts ionic-app, c'est pourquoi il est compilé en es5. Donc le faire passer à es6 pourrait aider? –

+0

Nah, désolé mon mauvais j'ai mal lu les docs TypeORM. Je ne pense pas que passer à ES6 va aider. On dirait un bug avec les décorateurs et webpack – misha130

Répondre

0

Il s'avère que Entity a été exporté deux fois dans le fichier de type principal. Le compilateur ne s'en plaint pas mais webpack semble avoir un problème avec ça. Supprimer la deuxième exportation a résolu le problème.