Redian新闻
>
彻底弄懂Javascript模块导入导出

彻底弄懂Javascript模块导入导出

公众号新闻


来源 | OSCHINA 社区

作者 | HelloWorld开发者社区

原文链接:https://my.oschina.net/helloworldnet/blog/5a619981


笔者开始学习 Javascript 的时候,对模块不太懂,不知道怎么导入模块,导出模块,就胡乱一通试
比如 import xx from 'test.js' 不起作用,就加个括号 import {xx} from 'test.js'
反正总是靠蒙,总有一种写法是对的,其实还是没有理解,还是不懂
尤其是在当初写 www.helloworld.net 网站的时候,一遇到这种问题,就懵逼了,尤其是引入第三方库的时候
这种情况下更多,此篇文章也是为了怕以后忘记,自查用的,也希望能帮助更多的朋友,此篇文章只是针对 ES6 的模块相关知识

首先要知道 export,import 是什么

我们知道,JS 模块导入导出,使用 import , export 这两个关键字
  • export 用于对外输出本模块

  • import 用于导入模块

也就是说使用 export 导出一个模块之后,其它文件就可以使用 import 导入相应的模块了
下面我们具体看看, import 和 export 到底怎么用?怎么导出模块(比如变量,函数,类,对象等)

1 导出单个变量

//a.js 导出一个变量,语法如下
export var site = "www.helloworld.net"

//b.js 中使用import 导入上面的变量
import { site } from "/.a.js" //路径根据你的实际情况填写
console.log(site) //输出:www.helloworld.net

2 导出多个变量

上面的例子是导出单个变量,那么如何导出多个变量呢
 //a.js 中定义两个变量,并导出
var siteUrl="www.helloworld.net"
var siteName="helloworld开发者社区"

//将上面的变量导出
export { siteUrl ,siteName }



// b.js 中使用这两个变量
import { siteUrl , siteName } from "/.a.js" //路径根据你的实际情况填写

console.log(siteUrl) //输出:www.helloworld.net
console.log(siteName) //输出:helloworld开发者社区

3 导出函数

导出函数和导出变量一样,需要添加 { }
//a.js 中定义并导出一个函数
function sum(a, b) {
return a + b
}
//将函数sum导出
export { sum }


//b.js 中导入函数并使用
import { sum } from "/.a.js" //路径根据你的实际情况填写
console.log( sum(4,6) ) //输出:10

4 导出对象

js 中一切皆对象,所以对象一定是可以导出的,并且有两种写法

4.1 第一种写法

使用 export default 关键字导出,如下
//a.js 中,定义对象并导出, 注意,使用export default 这两个关键字导出一个对象
export default {
siteUrl:'www.helloworld.net',
siteName:'helloworld开发者社区'
}


//b.js 中导入并使用
import obj from './a.js' //路径根据你的实际情况填写
console.log(obj.siteUrl) //输出:www.helloworld.net
console.log(obj.siteName) //输出:helloworld开发者社区

4.2 第二种写法

同样是使用 export default 关键字,如下
//a.js 中定义对象,并在最后导出
var obj = {
siteUrl:'www.helloworld.net',
siteName:'helloworld开发者社区'
}

export default obj //导出对象obj


//b.js 中导入并使用
import obj from './a.js' //路径根据你的实际情况填写
console.log(obj.siteUrl) //输出:www.helloworld.net
console.log(obj.siteName) //输出:helloworld开发者社区

5 导出类

导出类与上面的导出对象类似,同样是用 export default 关键字,同样有两种写法

5.1 第一种写法

//a.js 中定义一个类并直接导出
export default class Person {
//类的属性
site = "www.helloworld.net"

//类的方法
show(){
console.log(this.site)
}
}


//b.js 中导入并使用
//导入类
import Person from './a.js'

//创建类的一个对象person
let person = new Person()

//调用类的方法
person.show() //输出:www.helloworld.net

5.2 第二种写法

//a.js 中定义一个类,最后导出
class Person {
//类的属性
site = "www.helloworld.net"

//类的方法
show(){
console.log(this.site)
}
}

//导出这个类
export default Person



//b.js 中导入并使用
//导入类
import Person from './a.js'

//创建类的一个对象person
let person = new Person()

//调用类的方法
person.show() //输出:www.helloworld.net

小结

下面我们简单总结一下
export 与 export default 的区别
  • export 与 export default 均可用于导出常量、函数、文件、模块等

  • 可以在其它文件或模块中通过 import+(常量 | 函数 | 文件 | 模块) 名的方式,将其导入,以便能够对其进行使用

  • export default 后面不能跟 const 或 let 的关键词

  • export、import 可以有多个,export default 仅有一个。

  • 通过 export 方式导出,在导入时要加 { },export default 则不需要

  • export 具名导出 xxx ,export default 匿名。区别在于导入的时候,export 需要一样的名称才能匹配,后者无论取什么名都可以。

  • 模块化管理中一个文件就是一个模块,export 可以导出多个方法和变量,export default 只能导出当前模块,一个 js 文件中只支持出现一个

对于import ,export , export default ,他们的用法上面的例子已经很详细的列出了,忘记的时候,可以当作参考看看
最重要的还是要明白为什么要这么写,实在不明白记住就行了。

往期推荐



Win 11记事本标签页功能意外曝光

英特尔发布新的 “Xe” Linux 内核图形驱动程序

黑客在线出售4亿Twitter用户数据,喊话马斯克破财消灾



这里有最新开源资讯、软件更新、技术干货等内容

点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦~

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
烙印不仅占领硅谷而且要占领花街7000字+24张图带你彻底弄懂线程池即时 AI 超强升级!新增智能定向修图、导出高清多倍大图!这些人“请你吃饭”,务必学会拒绝,去了,麻烦就来了,建议弄懂通俗大白话,彻底弄懂https原理本质8点1氪:复旦MOSS团队回应内测国内首个类ChatGPT模型;全球第5例艾滋病治愈者出现;10省份放宽公务员年龄限制至40周岁B端产品,如何优雅地实现「数据批量导入」SpringBoot 实现 Excel 导入导出,百万数据量,性能爆表!全新JavaScript框架Qwik:以独特可恢复性方式带来更快的网页应用中国奇谭PPT模板,“我想离开浪浪山”!2022 JavaScript调查:TypeScript持续主导,Vite和Tauri大受欢迎西贡渔港粤式饮早茶猫语闲聊:AI绘画和AI眼中的毕加索RMS:GNU Emacs最不应该支持的语言是JavaScript国内首个类ChatGPT模型将开源/iPhone 15 Pro系列渲染图曝光/Meta加入硅谷AI竞赛1967年夏天,如何区分造反派和保守派?这么牛的PPT模板,马上过期了!Terraform 如何导入以及管理 AWS 现有安全组PPT如何导出高清图片?按ChatGPT模式做AI,一天成本要3亿?复旦抢发类ChatGPT模型MOSS!被骂惨了,内测服务器挤崩斯坦福博士生自制PPT生成神器ChatBCG免费开放!一键生成自定义模版,还能导出PDF今天继续大干。。。国内首个类ChatGPT模型发布/苹果阻止免费安装iOS 17开测版/小米汽车再曝光复旦发布国内首个类ChatGPT模型!已开放内测申请,代码将于3月发布传胡鑫宇录音导出,系自杀!软件供应商|绝佳的规模化上车机会中,如何把握最快的量产导入模式?“按ChatGPT模式做AI,我们一天成本要3亿”复旦推出类ChatGPT模型MOSS;京东百亿补贴降至;国人买苹果手机占12%年薪复旦团队发布类ChatGPT模型MOSS,服务崩掉后并给出回复“JavaScript治愈了我的一生”十分钟搞懂Java限流及常见方案淘宝订单“导入”微信了!纯干货,一篇文章弄懂留学生北京上海落户最新政策+常见问题JavaScript 代码优化之道
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。