在lib中导入{module}和在Javascript中从lib /模块导入模块的区别

时间:2017-08-31 23:02:05

标签: javascript import ecmascript-6 material-ui

我正在尝试优化我的供应商bundle.js,因为它已经膨胀,我正在使用material-ui库。

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

有人可以告诉我两个import语句之间的区别在于导入到您应用中的js代码的大小,或者它们是否相同。

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

3 个答案:

答案 0 :(得分:1)

import { Card } from 'material-ui';

这会导入使用 material-ui 默认 导出的内容,导入中定义为

    // user1 
    {
        "name": "John Bayes",
        "prog_langs": [
            {
                "name": "python",
                "score": 10
            },
            {
                "name": "java",
                "score": 500
            }
        ]
    }        



    // user2 
    {
        "name": "John Russel",
        "prog_langs": [
            {
                "name": "python",
                "score": 100
            },
            {
                "name": "PHP",
                "score": 200
            }
        ]
    }        



    // user3
    {
        "name": "Terry Guy",
        "prog_langs": [
            {
                "name": "C++",
                "score": 600
            },
            {
                "name": "Javascript",
                "score": 200
            }
        ]
    }

这将从 material-ui 导入指定的导出(假设卡存在)。

有关详细信息,请参阅以下堆栈溢出帖。

When should I use curly braces for ES6 import?

答案 1 :(得分:1)

在这种情况下,它们是相同的。

导入

import { Card } from 'material-ui';

对应于从根导入名为Card的导出成员。查看source code,我们看到它看起来像这样:

export Card from './Card';

./Cardmaterial-ui/Card)导入default export

第二次导入

import Card from 'material-ui/Card'

material-ui/Card导入默认导出,我们刚刚显示的是第一次导入的导出。

因此,它们是相同的。

答案 2 :(得分:1)

主要区别在于编译代码。为了提高性能,第一个选择:

import Card from 'material-ui/Card'

是最好的,因为它直接进入您要求的模块。

在第二个选项中:

export Card from './Card'

Babel使用transform-export-extension插件编译代码,因此编译后的代码比第一个选项大。