2017-08-31 23 views
1

私はベンダーbundle.jsを膨らませ、material-uiライブラリを使用しています。libからのimport {module}とjavascriptのlib/moduleからのimportモジュールとの違い

import Card from 'material-ui'; // Very bad as this will import everything 

2つのインポートステートメントの違いは、アプリケーションにインポートされたjsコードのサイズが同じかどうか、誰かに教えてもらえますか?

import { Card } from 'material-ui'; 
import Card from 'material-ui/Card' 
+0

実際に 'material-ui/Card''からのインポートカードは機能しますか? – DMan

+0

はい、どちらも機能します。あなたはここで彼らのドキュメントを参照することができますhttp://www.material-ui。com /#/ components/app-bar –

+0

ああ、私は次のバージョンのコードを見ていた... – DMan

答えて

1
import Card from 'material-ui'; 

これは、インポートで定義されて材料-UIとしてカードデフォルトを使用してエクスポートされているものは何でもインポートされます。

import { Card } from 'material-ui'; 

これは材料-UIから(カードが存在すると仮定した場合)という名前の輸出カードをインポートします。

詳細については、次のスタックオーバーフローポストを参照してください。この場合

When should I use curly braces for ES6 import?

1

、彼らは同じです。エクスポートされたメンバーをインポートする

インポート

import { Card } from 'material-ui'; 

対応するルートからCardと呼ばれます。 (material-ui/Cardです)./Cardからdefault exportをインポート

export Card from './Card'; 

source codeを見ると、我々はそれがこのようになっていることを参照してください。

二輸入

import Card from 'material-ui/Card' 

は我々だけで正確に最初のインポートがやったことであったmaterial-ui/Cardからデフォルトのエクスポートを、インポートします。

したがって、同じです。

+0

私は彼らが同じだとは思わない。私が間違っていると私を修正してください。しかし、あなたが使用しているバンドラーがツリーシェイキングをサポートしていない限り、 'material-ui ';からのimport {Card}はバンドル全体にライブラリを含めます。 material-uiはその最適化を利用できるes6モジュールを使用しているようです。一方、 'material-ui/Card''からのImport Cardは、Cardコンポーネントのみをその依存関係とともに含みます。 – pablogq

1

主な違いは、コンパイルされたコードにあります。パフォーマンス、最初のオプション改善するために:それはあなたが要求しているモジュールに直接行くので

import Card from 'material-ui/Card' 

を最高のものです。第二のオプションで

export Card from './Card' 

バベルは、コンパイルされたコードは、最初のオプションよりも大きくなるようにコードをコンパイルするtransform-export-extensionプラグインを使用します。

関連する問題