TypeScript完全解读(26课时)_14.ES6和Nodejs中的模块
创建modules文件夹,我们的文件都写在这里面
modules下面新建index.js文件,在index.ts内引入这个js文件
es6的模块
最主要的两个关键字 import和export
import可以引入和加载一个模块,我们在index.ts中已经使用过了
在modules文件夹新建a.js
我们可以export导出模块内容,导出模块,一般就是一个独立的文件,这个文件的所有变量外部是无法获取的,除非使用这个export导出这个变量
使用export导出name常量,他的值是Lison
分别再导出age和address
我们可以理解a.js它就是一个模块,在一个js文件里面可以export导出多个变量,每一个export导出一遍有待你繁琐,我们可以使用解构赋值导出一个对象
上面定义三个常量,通过解构赋值倒出来,这种写法可以统一在底部导出需要导出的变量,导出了哪些变量一目了然
还可以导出函数和类
还可以使用as起别名
注意:export导出的是对外的接口,而不是具体的值
下面是直接导出一个具体的值,是错误的
这样也是错误的
export语句导出的内容以及对应的值是动态绑定的,也就是说在一些地方引入这个模块导出的接口之后,当这个接口在其模块中它的值发生变化,引入的地方也会相应的变化。
新建b.js文件
导出time变量,下面设置每一秒修改time的值
在index.js引入b.js
先引入b.js然后每隔半秒打印时间的值
在修改成一秒,时间美妙都在发生变化
10分30秒。最后一点。。。。。。
export命令可以出现在模块中,处于模块中顶层的任务和位置,
顶层中不是在最顶部export导入,意思是export语句不能出现在块级作用域里,因为es6的模块设计就是静态编译,引入的这些东西编译代码时候就已经引进来的,而不是代码执行的时候去引入的
导出语句放在if里面是会报错的。
import引入语句
新建c.js文件
导出name和age
通过解构赋值引入并打印输出
引入的时候使用as 当做别名,引入的参数是只读的不能修改值。修改就会报错
如果引入的是一个对象的话,就可以修改他的属性
引入并输出这个Info对象
修改info上的name属性,为了方便排查问题,不建议修改模块引入的内容
新建d.js文件
d.js没有导出任何的内容
可以直接导入,导入后title就被修改了。
import有提升的效果,可以提升到模块的头部
新建e.js。定义一个方法
导出一个函数,返回一个字符串
导入进来,可以直接引用
import有提升的效果,会把js文件内 所有的import语句都提升到顶部。我们放在import的引入之前,调用这个函数也是可以的
动态拼接引用也是不行。会报错,编译的时候就要确定你要引入的是什么东西
重复的导入最终会合并成一个,最后只执行一次。
多次引用,最终会合并成一个
上面两个,最终合并成下面一个
ts不大好实现,就是用vue cli3.0搭建的一个js的环境项目。这是一个没有ts的项目
建一个module文件夹,再建一个index.js文件
再建一个a.js文件
在main.js内引入module/index.js文件
测试下module/index.js有没有引入成功,控制台成功输出,表示引用引入成功了。
22分33秒
在es6的模块中我们可以使用星号来引入一个模块中的所有内容,并且赋给一个变量
拷贝c.js里面的东西到a.js里面
使用星号引入a里面的所有
可以直接获取里面的一个值
也可以获取这个age,直接访问就可以了。
新建b.js
export default
export default可以导出一个默认的内容,一个模块只能使用一次export default
在b.js里面进行导出export default 导出一个func
在index.js里面这么引入
导入后,调用这个func
导入的名字和导出的名字不一定是必须要相同的,这里我改成functionName也是可以的
可以现在上面声明或者初始化后,再用export default导出。其他地方引用的时候直接用一个变量接收就可以了。
export default就是生成一个default的变量或者方法。也可以下面这种写法
引入的时候也可以用as起个别名
如果在一个js中引入一个模块,再导出它,可以直接将引入和导出合并
先引入再导出
这样就可以直接引入a里面的 就可以了
简单的写法:导入和导出用一句话
那么在引入的地方就可以这么写:
引入的时候必须使用真实的名字引入
下面这一句 相当于是把 func这个函数赋值给了default变量并且导出
所以使用export default导出可以直接 接一个变量,直接在后面接一个字符串
默认导出的内容
如果一个模块既有export导出也有export default导出,在引入的时候可以一起引入
注意用逗号隔开了。sex就是默认导出的内容,后面的对象使用使用多个export导出的内容
可以打印出来看一下
export和import合并。上面那一句,相当于下面两句的简写
合并写法是将引入的内容直接导出了。不能直接饮用export和import同时引入又导出的name和age
同时还可以改名和整体导出
这是用as换了个名字
使用星号,引入并全部导出
上面一句,相当于下面两句,一句话导入并导出
还可以把默认的改成一个变量
import()方法
import是静态编译,不能出现在块级作用域内使用,如果想在程序运行时候动态的引入,某个模块,类似于按需加载,动态引入的效果
import已经被加入提案 但是还没有正式通过使用。
webpack已经把import()实现了。来实现一些异步加载
import()会返回一个promise
在a.js内修改页面的title
b.js内修改title为haha
设置常量status等于1,
if判断就会把status引入转换为true,如果为true就引入模块a,否则就引入模块b
把status修改为0,那么就会引入的是模块b
Nodejs的模块
分为两种,一种是内置的模块,另外一种是用户自定义的模块,也就是我们现在要讲的
这里讲两种一种是export ,另外一种是module export
还在在vue -cli3.0常见的这个模块里面写
在a.node.js随便输出点东西,用node命令运行这个js文件进行测试
b.node.js内导出,它是会导出export这个对象
用require引入
可以直接导出一个接口。module.exports导出一个方法
转载于:https://www.cnblogs.com/wangjunwei/p/10886922.html
TypeScript完全解读(26课时)_14.ES6和Nodejs中的模块相关推荐
- TypeScript完全解读(26课时)_12.TypeScript完全解读-高级类型(1)
12.TypeScript完全解读-高级类型(1) 高级类型中文网的地址:https://typescript.bootcss.com/advanced-types.html 创建新的测试文件 ind ...
- TypeScript完全解读(26课时)_2.TypeScript完全解读-基础类型
2.TypeScript完全解读-基础类型 src下新建example文件夹并新建文件.basic-type.ts.截图中单词拼错了.后需注意一下是basic-type.ts 可以装tslint的插件 ...
- webpack 读取文件夹下的文件_TypeScript完全解读(26课时)_1.TypeScript完全解读-开发环境搭建...
1.TypeScript完全解读-开发环境搭建 初始化项目 手动创建文件夹 D:\MyDemos\tsDemo\client-demo 用VSCode打开 npm init:初始化项目 然后我们的项目 ...
- 【线上课程】ISO 22000:2018 食品安全管理体系标准解读|20课时
[线上课程]ISO 22000:2018 食品安全管理体系标准解读|20课时 [课程介绍] ISO22000:2018即Food safety management systems-Requireme ...
- 前端面试+学习笔记(HTML+CSS+JavaScript+ES6+Vue+NodeJs)
前端面试+学习笔记(HTML+CSS+JavaScript+ES6+Vue+NodeJs) 一. HTML 1. 盒子模型 是什么:每个元素被表示为一个矩形的盒子,有四个部分组成:内容(content ...
- 实战解读增长黑客在 B 端业务中的应用
姜菡钰(卡爷),网易云信及网易七鱼市场总监,拥有十余年 B 端与 C 端产品运营推广经验,对于增长黑客在 B 端业务中的运用颇有心得. 本文来源于第七届 TOP 100 全球软件案例研究峰会演讲实录, ...
- ES6箭头函数中的this指向
1箭头函数中的this (1)箭头函数中没有this : 这意味着 call() apply() bind() 无法修改箭头函数中的this (2)箭头函数中的this指向 :访问上一个作用域的thi ...
- ES6的导入和导出模块
ES6的导入和导出模块 1.导出模块 1.1普通的export导出方式 //先定义后导出 var name = 'zjl' var age = 18 function test1(){...} fun ...
- ECMAScript 2015(ES6)规范中的promise
ECMAScript 2015(ES6)规范中的promise – 转 概述 Promise 对象用于延迟(deferred) 计算和异步(asynchronous ) 计算..一个Promise对象 ...
最新文章
- 石大ACM2587解题报告
- redis集群学习一些记录
- 【机器学习】线性回归之梯度下降、多元线性回归概述
- 818. Race Car
- 电脑遇到问题需要重新启动_如何解决电脑风扇转一下就停开不了机的问题-系统城...
- COMSOL流体操作
- Kafka自带的Zookeeper未授权访问漏洞
- 在线图片处理api接口
- QT 加载歌词LRC文件
- MOVE-CORRESPONDING
- sigmoid函数温习【函数曲线可视化与导函数曲线可视化】
- 称球问题|信息量|拓展|C++代码实现|12大小一样的球,找出其中质量不一样的球解析和代码实现
- EventBus简介与使用
- 微信支付一 :公众号支付1
- 你已经拿到手的人工智能手(zha)机(dan)
- webstrom主题、字体设置
- VR 科普-位置跟踪器,鼠标定位原理
- Vue3基础——条件渲染、列表渲染、事件事件修饰符、父子组件间的数据传递、生命周期钩子
- Spring Cloud(一):Spring Cloud的优势是什么?
- 红米note8pro手机电路图
热门文章
- Java的直接量——2017.08.01
- 【iCore3 双核心板_ uC/OS-III】例程四:时间管理
- HTML基础 DOM概览(第一天)
- 安装faac编译问题
- photoshop 工具栏中英文对照
- 私人笔记 -- 将图片插入到指定的单元格位置,并设置图片的宽度和高度
- Javascript版的Repeater控件实现
- 不得不服!腾讯优图联合腾讯会议正式上线神奇的眼神接触功能
- 支持中国西安申办ICCV2025,见证计算机视觉蓬勃发展的20年 | Vote for ICCV2025 Xi'an China...
- 让机器也拥有品味!时尚图像补全网络FiNet| ICCV 2019 Oral