素描

进口和出口都是模块化的进出口在6。js是不是在现阶段支持。它需要由Babel编写的,是一种模块化的代码节点。JS。(对Node.js模块,参考其他js模块篇)

口暴露

使用导出可以公开方法、对象、字符串等等,如下代码


1 写作
导出var =函数(){
(1)console.log;
}
2 写作
var=:1
导出{条};
3 写作
var巴兹=你好世界;
出口{巴兹qux };


然后,上面的代码是由Babel编写的,成为一个js代码,可以执行如下


使用严格;
这个模块是标记模块。
object.defineproperty(出口,__esmodule
真正的价值:
});
1 写作
变量foo = exports.foo =函数foo(){
(1)console.log;
};
2 写作
var=:1
exports.bar =吧;
3 写作

Var Baz =你好世界;
exports.qux =巴兹;



当我们看到上面的代码,我们知道ES6出口会变成暴露在Node.js的方式出口。

进口

看看进口的写作,和我们介绍xx.js出口文件

第一种写作方法


进口{ foo,qux }从'。 / XX;
console.log(qux);


foo,qux是一种属性,我们暴露在xx.js。这是暴露在xx.js属性foo,酒吧和qux3。众所周知,这种类型的书写需要知道文件中暴露的属性的名称,并且可以根据需要编写,而不枚举所有属性。



现在让我们来看一下巴别塔编译代码:


严格使用;
无功_ =需要('。 / XX);
console.log(_。qux);


这是一个简单的要求的方法,引入xx.js,这样我们也可以引进6基于模块对Node.js模块。

写作的第二种方式


从*中导入;
console.log(XX吧);


这里是xx.js介绍,这将暴露在xx.js XX的属性,这是由module.exports别名。它由Babel编译如下:


严格使用;
无功_ =需要('。 / XX);
VaR XX = _interoprequirewildcard(_);
功能_interoprequirewildcard(obj){
是节点模块还是ES判断模块
如果(obj对象。__esmodule){
返回对象;
}
{其他
无功newobj = { };
如果(obj!= NULL){
对于(OBJ VAR键){
如果(object.prototype.hasownproperty.call(obj,关键))
newobj {key} = obj {key};
}
}
与旧的巴别塔编译器兼容
newobj.default = obj;
console.log(newobj);
返回newobj;
}
}
console.log(XX吧);



看到上面的代码,有一个判断,即节点模块或ES模块,它也与ES模块和节点的模块兼容。

写作的第三种方式


从OO导入OO
console.log(OO。酒吧);


这样,OO是一个随机变量,乍看起来可能与第二种方法相同,但实际上,看看编译后的代码:


严格使用;
无功_ =需要('。 / XX);
无功_2 = _interoprequiredefault(_);
功能_interoprequiredefault(obj){
__esmodule obj返回obj对象:
{默认:obj };
}
console.log(_2默认吧);


在最后一排,oo.bar编译成_2.default.bar,和多个默认,在酒吧当然是没有找到,所以这种用法不引入口属性,但说出口的默认下。

出口违约暴露与一次性暴露

出口和出口违约我将在另一篇文章中总结。这里我们只讨论导出缺省值的用法,下面是代码。


var = 123;
导出默认值;


经通天编译


使用严格;
object.defineproperty(出口,__esmodule
真正的价值:
});
var = 123;
exports.default = foo;


看到foo的最后一排将被分配到exports.default,这相当于进口对象。 / XX。这种方式调用默认的属性,所以这两个用途对应使用。由于该属性的值分配给exports.default,然后可以有以下用途


出口违约123;





导出默认值:123 };



导出默认函数(f){ }




导出缺省(函数){ }


上面的代码是单独编写的,因为js导出只能在一个默认情况下使用一次。原因是,module.exports是使用module.exports相同。


导出默认值为123;


导出默认值也可以用来公开类。

其他一些用途

继承

这是模块继承。事实上,父模块引入子模块,然后公开子模块暴露的属性。


导出*;


编译后编译


严格使用;
object.defineproperty(出口,__esmodule
真正的价值:
});
无功_ =需要('。 / XX);
Object.keys(_)。ForEach(功能(关键){
如果(关键=默认| |关键=__esmodule )返回;
object.defineproperty(出口的关键,{)
枚举:真,
获取函数获取(){
返回_ {key};
}
});
});


注意下面的句子


如果(关键=默认| |关键=__esmodule )返回;


默认属性不对外公开…这表明我们在文件中引入的导出缺省值与导出默认值无效,而不是写方法。


从导出;


继承的编写通常用于组织多个模块,这些模块通常与以下包一起使用。

引线文件夹(报价包)

许多人不理解下面的代码行


导入*从O开始;


为什么要导入的文件夹,文件夹不能注意什么,至少有一个文件index.js或package.json也是JS的名字,因为文件夹里面index.js那么这是不是一个文件夹但Node.js包(详见Node.js包,导入文章)将被编译成通天塔的要求。需要的可以去参考路径指定的包,因此,进口可以进入一个文件夹,我们可以依靠index.js出口其他文件代码文件夹,例如:




/ / index.js
导出*从/1;
导出*从/2;


我们可以通过进口OO文件夹暴露在1.js和2.js性能。

总结

从编译代码巴别塔来看,我们可以看到,出口的使用类似于出口,出口module.exports和默认。



以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持。