2016-11-06 6 views
1

私はhereからAngularにwebpackを追加するチュートリアルに従っています。私が正しく理解すれば、メインモジュールをwebpackにフィードしてからツリー全体を走査し、すべての参照ファイルをバンドルに追加します。私は、ツリーシェイクを使用してこれを最適化できることも読んでいます。webpackとtypescript/angular2でツリーシェイキングが必要ですか?

私がここで理解していないのは、webpackがすでに「使用済み」モジュール(つまり、「インポート」しているモジュール)のみをスキャンしている場合に、ツリーシェイキングが必要な理由です。

ツリーシェイクは何か追加します(使用されていないモジュールからクラスをチェックし、インポートされてもモジュールからモジュールを削除するなど)か、私はその概念をすべて誤解していますか?

+3

はい、あります。ツリーシェイクとは、インポートされたモジュールの未使用部分を振り払うことです。はい、それは何か追加です。 – estus

+0

を参照してください。したがって、モジュールAがモジュールB1とB2を含むモジュールBをインポートするが、モジュールAがB1のみを使用する場合、ツリーシェイクは出力からB2を「削除する」か? –

+0

@estusあなたは答えを追加することができます、私はそれを受け入れる:) –

答えて

0

コメントに記載されているように、本当の利点は、ファイルからいくつかのコードを削除できることです。ツリーシェイクなしでは、エクスポートされたクラスの1つだけが使用されてもモジュール全体が結果になります。

例:

export class AppComponent { 

    test(): void { 
     console.log("12345"); 
    } 
} 

export class AppComponentDeadCode { 

    test(): void { 
     console.log("54321"); 
    } 
} 

app.module.ts

import { AppComponent } from './app.component'; 

は今、この例では、我々はAppComponentDeadCodeクラスをインポートすることはありません

app.component.ts。

  • tree-shakingがないと、両方のクラスが結果のモジュール/バンドルに含まれます。
  • tree-shakingで、クラスAppComponentDeadCodeは、結果のモジュール/バンドルから削除されます(それをインポートする他のモジュールはないとみなします)。

P.S.残念なことに、この光沢のあるおもちゃの状態はかなり "ベータ"であり、typescript/angular2を使っても結果を簡単に得ることは難しいです。さらに詳しい情報はhereです。

関連する問題