私は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を使用しています。
webpackリポジトリで報告した問題を見ました。これは正しい方法ですが、UglifyJs2のバグのためにツリーシェイクではありません。 –
リポジトリのBabiliで解決しました。 – Blacksonic