2016-08-21 9 views
2

私はfile car.tsにCarというクラスがあり、エンジンには2つのクラスがあります。file engine.tsです。TypescriptとWebpackでクラスをツリ​​ーシェイキングする方法は?

car.ts

import { V8Engine, Engine } from './engine'; 

class SportsCar { 
    constructor(private engine: Engine) {} 

    toString() { 
    return this.engine.toString() + ' Sports Car'; 
    } 
} 

engine.ts

export interface Engine { 
    toString(): string; 
} 

export class V6Engine implements Engine { 
    toString() { 
    return 'V6'; 
    } 
} 

export class V8Engine implements Engine { 
    toString() { 
    return 'V8'; 
    } 
} 

export function getVersion() { 
    return '1.0'; 
} 

console.log(new SportsCar(new V8Engine()).toString()); 

car.tsのみV8Engineクラスをインポートファイルが、V6Engineクラスはまたしても縮小さファイルに表示されます。 engine.tsからの未使用関数iのエクスポートは取り除かれます。

UglifyJSプラグインなしでWebpackを実行すると、V6Engineクラスには予期して/* unused harmony export V6Engine */とマークされます。 は、しかし、プラグインを追加した後、私はUglifyJSから、この警告メッセージが表示されます:

WARNING in car.prod.bundle.js from UglifyJs 
Dropping unused function getVersion [car.prod.bundle.js:89,9] 
Side effects in initialization of unused variable V6Engine [car.prod.bundle.js:73,132] 

私は、問題を再現できるcreated a repositoryを持っています。 npm run webpackおよびnpm run webpack-prodのクローン作成、インストール、実行により問題が再現されます。

これは、Typescript transpilation、UglifyJS、またはこれらのツールのオーケストレーションに関するバグかどうかわかりません。 私は、es2015モジュールとWebpack 2.1.0-beta.21でTypescript 2.0-devを使用しています。

+0

webpackリポジトリで報告した問題を見ました。これは正しい方法ですが、UglifyJs2のバグのためにツリーシェイクではありません。 –

+0

リポジトリのBabiliで解決しました。 – Blacksonic

答えて

0

鍵は、ES2015モジュールを出力してコード化し、Babili minifierを実行することです。それは木の揺れの権利をします。

関連する問題