Javascript 何时使用;导入*为Foo“;对;进口食品;?

Javascript 何时使用;导入*为Foo“;对;进口食品;?,javascript,import,ecmascript-6,Javascript,Import,Ecmascript 6,我正在将BackboneJS(v1.2.2)项目转换为ES6 w/BabelJS 我注意到这两者之间有区别: import Backbone from 'backbone' 及 阅读后,我了解到前者正在导入主干的默认导出,后者允许我“导入整个模块并通过属性表示法引用其命名导出” 我正在努力理解这两者之间的区别。对象在两个实例中都返回,但前者似乎用其他属性/方法修饰。至少我认为导入“整个模块”会有更多的属性/方法。。。但是我看到了相反的情况。一个模块可以导出一个“默认导出”和/或一个或多个命名导

我正在将BackboneJS(v1.2.2)项目转换为ES6 w/BabelJS

我注意到这两者之间有区别:

import Backbone from 'backbone'

阅读后,我了解到前者正在导入主干的默认导出,后者允许我“导入整个模块并通过属性表示法引用其命名导出”


我正在努力理解这两者之间的区别。对象在两个实例中都返回,但前者似乎用其他属性/方法修饰。至少我认为导入“整个模块”会有更多的属性/方法。。。但是我看到了相反的情况。

一个模块可以导出一个“默认导出”和/或一个或多个命名导出

使用问题中的第一个语法导入仅导入默认导出,并为该对象设置命名标识符(示例中的主干)

第二种语法称为名称空间导入,它在单个“名称空间”对象下导入整个模块

例如:

export.js


这取决于模块的接口以及您希望如何利用它。在主干网的npm包的情况下,实际上没有默认的导出,所以两个版本在Babel传输时应该大致相同

至少我认为导入“整个模块”会有更多的属性/方法

这取决于默认导出是什么以及有哪些命名导出。以下是一个不属于这种情况的示例:

exporter.js

导出默认值{
一:"一",,
二:"二",,
三:“三”,
};
出口var a;
importer.js

//有3个道具['1','2','3']
从“出口商”进口;
//有2个道具['default','a']。
进口*作为“出口商”的所有出口;

什么是“附加属性/方法”的示例?第一个实例似乎用其他插件的属性修饰。例如,我加载了“backbone.localStorage”插件,看到了在主干上定义的“localStorage”,但现在我想起来了,这是有意义的,因为“backbone.localStorage”将自身写入全局主干对象。后者返回一个不受“backbone.localStorage”修改影响的命名空间实例。
将{b:2}导出为b;
无效。@JMM-正确,已修复。
将{b:2}导出为b}
也是无效的。我想您要做的是
导出var b={b:2};
var b={b:2};导出{b};
@JMM-又对了!我以为您可以在使用“as Name”语法时导出直接值,但显然您不能!再次修改!
import * as Backbone from 'backbone'
let b = {b: 2};
export default {a: 1}; // <- this is the ONLY default export
export {b};
export let c = {c: 3};
import SomeName from 'export'; // 'SomeName' is now the {a: 1} instance.
import {b} from 'export'; // 'b' is now the {b: 2} instance.
import * as ns from 'export'; /* 'ns' now has properties 'default', 'b' & 'c',
  representing {a: 1}, {b: 2} & {c: 3} respectively */