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导出一个方法


TypeScript完全解读(26课时)_14.ES6和Nodejs中的模块的更多相关文章
- TypeScript完全解读(26课时)_8.ES6精讲-ES6中的类(进阶)
8.TypeScript完全解读-ES6精讲-类(进阶) 在index.ts内引入 Food创建的实例赋值给Vegetabled这个原型对象,这样使用Vegetables创建实例的时候,就能继承到Fo ...
- TypeScript完全解读(26课时)_7.ES6精讲 - 类Class基础
ES6精讲 - 类Class基础 es5中创建构造函数和实例 原来在es5中的写法 定义好Point后,在原型对象上定义getPostion的方法 实例自身是没有这个方法的,我们调用的时候会去创建他的 ...
- TypeScript完全解读(26课时)_汇总贴
ECMAScript 6 入门:http://es6.ruanyifeng.com/ 官网:http://www.typescriptlang.org/ 中文网:https://www.tslang. ...
- 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的插件 ...
- TypeScript完全解读(26课时)_4.TypeScript完全解读-接口
4.TypeScript完全解读-接口 初始化tslint tslint --init:初始化完成后会生成tslint.json的文件 如果我们涉及到一些规则都会在这个rules里面进行配置 安装ts ...
- TypeScript完全解读(26课时)_5.TypeScript完全解读-函数
5.TypeScript完全解读-函数 新建function.ts.然后在index.ts内引用 给函数定义参数类型:上面是es5的写法 下面是ts6的写法 一个完整的函数类型.括号 箭头 numbe ...
- TypeScript完全解读(26课时)_9.TypeScript完全解读-TS中的类
9.TypeScript完全解读-TS中的类 创建class.ts文件,并在index.ts内引用 创建一个类,这个类在创建好后有好几个地方都标红了 这是tslint的一些验证规则 一保存就会自动修复 ...
- TypeScript完全解读(26课时)_1.TypeScript完全解读-开发环境搭建
1.TypeScript完全解读-开发环境搭建 初始化项目 手动创建文件夹 D:\MyDemos\tsDemo\client-demo 用VSCode打开 npm init:初始化项目 然后我们的项目 ...
随机推荐
- 使用 Kingfisher 处理网络图片的读取与缓存
Kingfisher 是一个读取网络图片和处理本地缓存的开源库,由 onevcat 开发.提到图片缓存库,那么熟悉 Objective-C 开发的同学,可能会想起 SDWebImage. 没错,Kin ...
- vmware克隆一台机器后修改etho
1 vi /etc/udev/rules.d/70-persistent-net.rules 2 注释NAME="eth0"的内容 3 将NAME="eth1" ...
- 二进制安装Mysql 5.6(免编译)
安装系统基础软包 yum install -y make bc perl gcc openssl openssl-devel ncurses ncurses-devel 安装方式:二进制免编译安装 查 ...
- 高性能MySQL(二)
MySQL基准测试 为什么需要benchmark 验证基于系统的假设,确认是否符合实际情况 重现系统中的某些异常行为,以解决它们 测试系统当前的运行情况,如果不清楚当前性能,就无法确认优化效果 模拟比 ...
- C语言的面向对象设计之 X264,FFMPEG 架构探讨
FFMPEG架构分析 使用面向对象的办法来设想这样一个编解码库,首先让人想到的是构造各种编解码器的类,然后对于它们的抽象基类确定运行数据流的规则,根据算法转换输入输出对象. 在实际的代码,将这些编解码 ...
- 计算机鼻祖-Donald Knuth(高纳德) 的传奇
李开复说,练内功,不要仅仅花功夫学习各种流行的编程语言和工具,以及一些公司招聘广告上要求的科目.要把数据结构.算法.数据库.操作系统原理.计算机体系结构.计算机网络,离散数学等基础课程学好.最好还是试 ...
- EasyPlayer Android安卓流媒体播放器实现播放同步录像功能实现(附源码)
本文转自EasyDarwin团队John的博客:http://blog.csdn.net/jyt0551,John是EasyPusher安卓直播推流.EasyPlayer直播流媒体播放端的开发和维护者 ...
- ESXi 5.5 RTL9168E网卡驱动 找到网卡
如果你对专业服务器的价格望而却步,恰巧又想在普通的PC上安装ESXi,恰巧又是ESXi 5.5版本,那么这篇文章中提及的问题你可能会遇到,并能给你提供一些帮助. 1.成功安装重启以后提示“no boo ...
- less 一种 动态 样式 语言
LESS « 一种动态样式语言 http://www.bootcss.com/p/lesscss/ 一种 动态 样式 语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承,运算, 函数 ...
- Local Response Normalization 60 million parameters and 500,000 neurons
CNN是工具,在图像识别中是发现图像中待识别对象的特征的工具,是剔除对识别结果无用信息的工具. ImageNet Classification with Deep Convolutional Neur ...