2017-09-07 5 views
0

非常に奇妙な名前の問題を見つけました。私は、アプリケーションをビルドしてコンパイルするためにwebpackを使用するIonic AppでTypeScriptライブラリ(TypeORM)を使用しようとしています。Webpack tree shaking - エンティティと呼ばれるエクスポートを削除します

タイプORMには、Entity,AbstractEntityなどと呼ばれるエンティティのデコレータがあります。 Entityデコレータをインポートして使用すると、webpackで使用されているとマークされません。 AbstractEntityに切り替えると、使用済みとしてマークされます。他のすべてのデコレータは使用済みとしてマークされます。

この活字体クラス

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

としてマークされているが、私はAbstractEntityEntityを変更するときに使用

としてマークされます
// 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); 

なぜですか?

+0

彼らのドキュメントでは、es6&に切り替える必要があり、uglifyjsはハーモニーをサポートしていないとしています。イオンアプリスクリプトにgit://github.com/mishoo/UglifyJS2#harmonyをインストールしましたか? – misha130

+0

彼らのドキュメントはwebpackのドキュメントですか?私はionic-app-scriptsの設定を変更しなかったので、es5にコンパイルされています。だからそれをes6に移すことは助けになるだろうか? –

+0

Nah、申し訳ありませんが、私はTypeORMのドキュメントを誤解しました。私はes6への蒸散が助けになるとは思わない。デコレータとWebpackのバグのようです – misha130

答えて

0

Entityがメインのタイスクリプトファイルで2回書き出されたことが判明しました。コンパイラはそれについて文句を言っていませんが、webpackには問題があるようです。 2番目のエクスポートを削除すると、問題が解決されました。

関連する問題