00:00
好,刚才我们看的是这个ts conig啊,我们TS编辑器的配置文件看了几个简单的啊,也是先体会了一下,那接下来呢,我们接着再来往下看,我们这个TS杂一些,那为了演示的话,我这块的话,我先把这个CDE它掉了,因为它在这,我们现在暂时用不它,然后这个哎,我这样啊,这个单行注释,然后在我们这儿的这块呢,叫做一个。Hello hello,这个木呢,我也暂时先给它删掉啊,删掉因为我们暂时不用它,那下边我们来说的一个配置叫什么呢?叫做一个option,诶叫做一个compeller option啊compeller option这个是我们这个可以说是ts con当中最最重要的一个东西,那这个是什么呢?这个是我们编译器的一个选项,哎,这个是我们这个编译器的选项。哎,换句话说,它的作用,它决定了我们编译器如何去对我们这个TS文件进行编译,那它这个配置的话,本身是一个比较复杂的配置,它不像我们之前讲的什么include呀,Exc整完了以后直接配置,它里边实际上包含了很多很多的子选项,比如说以我们的这个哎文档这为例,我们来看一下啊,在这儿呢,这个是我们这个compeler options,在下边我们都列下了哎项目选项,什么target呀,Li呀,哎还有我们的哎,Module啊,Out dear呀,这些都是它里边的子选项,所以其实我们要学的compel options学的是什么?学的就是它里边有哪些子选项,而这些子选项它有哪些的作用,这是我们往下要去研究的内容,那我们就直接在这里边就一个个来说了啊,子选项怎么写,那其实也就是一个杰森的一个语法,杰森怎么写,那他呢就怎么写就完事了。
01:58
我们要说的第一个子选项叫做target target叫什么?哎,叫做一个目标,那什么叫目标呢?哎,我们来说一下target target的它用来什么呢?用来指定我们这个TS被编译为的这个,呃,这个ES的版本。
02:19
ES的版本,那这里边呢,实际上我们现在呢,我们来看一下啊,这个是我们的TS文件,这个是我的GS文件,现在我们这看不出来啊,那怎么办呢?我在里边啊,我直接写一个。一个A等于一个十,我创建一个变量叫做A。下边呢,我们对这个变量进行对我们这个TS进行编译,我们就直接执行tsc了,进行编译,编译完了以后的话,我们来看一下我们这个GS,我们会发现实际上我这儿写的是light,当我编译完了以后,它变成了一个这个,呃,为什么呢?这就是因为默认情况下我们的TS会被转换成ES版本的,这个GS为什么转成ES3,因为ES3比较老,老就意味着它的兼容性比较好,所有览器都支持,所以它默认情况下转换的是一个ES3,那你说老师我不想转成ES3,我想转成ES,哎,ES6,那这里边我要怎么写?哎,那很简单,那你看就是通过我们这个target来配置,Target现在是ES3,对吧,这就它的默认值,你说你想ES5那就ES5,你说你想ES6那就ES6,当我把它改成ES6的时候,那这个效果是什么呢?这个时我们的GS文件再被编译,它就不是编译成ES5的了,就是不是ES的了。
03:40
而就是ESES6的,我们还是再编译一下回车。看效果啊,稍微等一下。这个时候你会发现,你看啊,TS里是light a GS里也是什么,哎,也是一个A,那就是这样一个效果,就是说白了,它指定你那个编译成的那个GS文件的一个版本,那你想转换成什么版本就什么版本,对吧,你可以写ES3,诶ES5还有什么呀?诶ES诶六也就是ES2015对吧,ES2016 es2017,最新的ES2020,你在这都可以指定,甚至还可以写什么呢?我们有一个叫做ex next exs next就表示的是一个最新版本的一个ES,诶你可能会好奇,老师,那这里面我能写哪些值啊,那其实就是写的就是ES版本,ES有哪些版本,你这就能写什么值,你说老师我还是不确定能不能告诉我能写什么,哎,那其实有一个小的技巧啊,比如说我这直接随便瞎写一个,我写ABC,那ES肯定没有ABC这个版本,但是呢,不不怕它,我们写完了以后,我们就直接对它进行编译。
04:49
编译完了以后的话,其实很明显,我们编译器是不是肯定会报错呀,哎报错报错这时候呢,你看就给你写了,哎,Target选项option啊是吧,Must必须是什么呢?ES3ES5ES6,也就是说它必须是这几个值,所以我直接把这几个值我给你粘过来,你就看到了,这个是target的可以接受到的什么呢?诶接受的值啊,ES3诶ES5ES6啊,2015 2016 2017 2018 2019 2020就都可以了,所以我们如果比如说我想用ES6,那我就可以写一个ES2015,那这不就是ES6是这么一个效果啊,这么一个效果,那好,这就是一个target指定的是我们编译成GS的一个版本啊,刚才也说了一个小技巧,就是你可以传一个错误的值,来看一下它可以传递的是哪些参数,然后第二一个属性。
05:43
我们叫做一个module。Modu是什么意思呀?哎,Modu我们说它叫做一个模块,模块是干嘛的?哎,模块,哎我们这个GS里边有一个特别讨厌的事儿,就是GS,最开始的GS是没有模块化这个概念,它本身是没有模块化,但是后来的话,我们对GS对它进行扩展,添加增强这个模化的功能,以至于后来包括ES都有了自己的模化,那就导致实际上在我们GS存在各种各样不同版本的一个模块化的一个解决方案,那这个时候它给我们带来的问题就是,哦,我们这有这么多的模块化解决方案,那你最终你编译成的GS,你要使用哪种模块化的解决方案呢?那这里边我们就需要通过modu来设置,那这个modu就是什么呢?哎,就是来指定我们要,诶使用的一个模块化的一个规范。
06:41
哎,模块化的一个规范值啊,还是这么几个,比如说我还是写一个ES2015,那表示什么意思,哎,我要使用这个ES6的一个模块化规范,那这什么效果,要看它的话,我们还得找一个模,我随便创建一个TS文件,比如说我就叫一个m.tS在这里边能不能导出一个内容啊,直接来一个这个,哎看我们来一个这个,嗨,等于什么呢?等于一个你好,我就导出一个变量啊导出一个变量,然后的话在我们app.ts里边,我们来引入它,我们直接import import,谁呢?Import,我们这个IM,我们这个叫做一个什么呀?叫做一个hi from from哪呢?诶from这个M点一个这个,诶GS,诶从我们这个模块,诶这地方加了一个大块。
07:30
哎,从我们这个模块里边来引入这个氦这个变量在这儿的话,我们就用到了一个魔啊,当然这个是我们在TS里用的,我们用完了以后,它是不是需要被转换成GS呀,哎,GS,那我们来看一下它转换的GS会用什么版本呢?我们直接对它进行编译。诶,那这个时候我们会发现什么呢?诶,这个是app.gs啊app.gs由于什么呢?由于我们在这儿引入的这个亥啊,它并没有使用,所以在这里面我们是不是看不到那个氦啊,所以为了能看到啊,我们在这儿来打印一下这个氦,打印一下。
08:10
哎,重新编译。诶,所以刚才我们通过这儿我们也会发现,我们的TS编译器是很聪明的,就是如果你的一个变量,如果你没有用的话,压根就没用,它实际上是不会给你整过来的,那这里边你会发现,你看我们这个时候它所采用的模块化的标准,是不是就是ES6的模块标准呀?诶为什么会用E6的,就是因为我们在这儿是不是已经指定好了,哎,真的好了,你说老师我不想用ES6的,我想用别的,诶那怎么办呢?诶比如说我想用一个这个common GS啊common GS可不可以一样的,我们这个时候再编译,那你会发现我们的模块化的标准就就变了。哎,就变了,你看这个时候我们再转译,再编译过来,这个时候是不是又变成了这个这个common.gs哎,common.gs就是这样一个效果,但是我这个路径其实写的不太对,我应该写一个点斜杠啊m.GS这个我再编译。
09:10
啊,就这个路径P用这个点鞋垫开头,这时候就没有问题了啊,没有问题了,这叫common.gs那我们这个TS里边我能采用哪些模块标准呢?其实都能用啊,都能用,但是还是那个小技巧,你给他一个错误的值,然后再进行编译,你就能看到他给我们提供的这些可选值了。哪去了?在这呢?哎,Argument for module options must比一共有这么几个值,给你们粘过来。你会发现它跟那个target的那个几个值差不多,那呢,诶没有模化不规范,诶common GS就是用我们common GS AMD就是AMD标准systemd的,然后ESES是一样啊S2E几个版本,一般我们推荐你要的话就是用S2015这个版本啊,2015这个版本也就是ES6啊好,这个是我们这两个,一个叫做target,一个叫做哎modu,然后再往下看,还有什么呢?哎,还有一个东西我们叫做一个Li。
10:16
Li叫什么东西?Lib叫做Li Li。Library是什么意思呀?库的意思啊,用来指定我们这个项目中诶要使用的一个库,这个东西一般情况下我们是不动它,一般情况下是不动它的,我先给他了啊,我先给他了它那个库什么意思?因为我们在这儿我们写的是一个呃,GS代码,S代码,当然最终会转成GS,那GS我们说除了GS标准,GS范本以外,它有很多第三方的库,比如说我们经常在也会用到的,我们是不是可以会用到这个DOM呀?哎,document.get and白D这些是不是都是这个do的代码啊,哎,DOM的代码这些东西,那DOM的话就是我们其中的一个这个库,那这个library表示什么意思呢?Library就是表示来指定诶你的这个项目里面需要用到哪些库,你要用到这些这些库,我就会根据这些库去检查你的代码,你说我用到do了,诶我就检查一下,我这用document是不是就有有这个有这个。
11:22
提示啊,哎,有这个提示,但是你说了我这来一个呃,对吧,我这里边我什么也不写,什么也不写表示什么意思,那是不是就是我这个什么库都没用啊,哎,什么库都没用,那这个时候你看啊,我回过头来再写这个document。看到了吗?是不是就没有提示了啊,没有提示了,为什么没有提示了,因为你已经告诉他了,我没用do,那你没用do,那这自然就不给你提示了,那你想用DOM怎么办呢?你可以在这加上,比如说写一个DOM,哎,你告诉他我用了DOM了,那我就可以写一个document,点一个get ID,你看是不是就可以写了,哎,可以写了列吧,这个东西一般情况下我们不需要改啊,一般情况下我们不需要改,什么时候需要动它,就是当你说诶我的代码不是在浏览器的环境里运行的,是在这个note g里运行的,它里边没有do,那你可以去改一下,但是一般情况下,如果就是我们正常的是在前端在浏览器当中去运行的代码,这个力吧,我们是不需要去设置的啊,那么接下来的话,我们来看看什么呢?还有一个关心,那这个力吧,我能填哪些东西啊,哎,还是那个小技巧,随便写一个,你瞎写一个,瞎写一个,然后你对它进行编译。
12:36
哎,你看是不是就给你写上了,你看哎呀呀呀呀,太多了,Arguments或Li option must b,你看一共有这么些的值。我都给粘过来啊,都给粘过来这个值啊,有点太多了,有点太多了,你看啊,可以写什么呀,ES5对吧,我可以用ES5的库,你可ES5我写一个ES,然后逗我来一个什么呢?来一个DOM,哎,然后你可以后边往下写,然后呢,你看什么呀,DOM的什么web,然后什么这个E里边的什么,哎,就是genator,你在这都可以去根据你的实际情况在这个地方去指定什么新的,你看什么big in,什么string promise都可以在这儿去指定啊,但是我们说了默认一般情况下这个玩意儿不用动它啊,一般情况下不用动它,了解一下就行了啊,叫做一个Li巴,指定我们浏览器当中所要使用的一个库啊,一个库,然后再往下啊,这我们先住了啊,因为我们一般这就默认就好了,它的默认值我们可以看一下,默认值我在这应该写了。
13:42
它的默认值,哎呀。哎呀哎呀,默认值我还没写啊,默认值我还没写,没写我们就不管它了啊,默认值应该就是什么do呀,ES这些东西就是默认的情况呢,就是我们浏览器的运行环境啊,所以只要是在浏览器的运行呢,你就不用管它了啊,在note里运行,那就根据你的实际情况去指定就齐了啊齐了下边一个啊,这个我们不写它了,下边一个我们说谁呢?下边一个我们要说的一个属性叫做一个out there。
14:12
Out地,什么叫out地呢?诶,那我们上边的话写了一个这个include,也就是说哪些文件夹里边这个代码呢,它需要被我们这个解析啊,需要被这个ES这个这个编辑器呢,所所这个解析,那我们这个解析完了以后,编译完了以后,我们这个文件是在哪儿的,比如说我app.ts编译完了以后,我这个GS文件在哪啊?哎,它是不是和这个TS文件在同一级的目录下,他们在一起啊,在一起,所以有的时候的话,我们其实我不希望他们在一起,我希望呢,Src里放源码,哎,我会单独有一个文件,有一个目录,叫我来放什么呢?放这个编译后的文件,那这个就是我们这个outer的作用,它指定什么呢?哎,指定out地用来什么呢?哎,用来指定我们这个编译后文件所在的目录,也就是你的GS文件,你。
15:12
啊,放在哪啊,那这块我们一般就是诶根目录下的Dis目录,所以我就直接写一个点斜盖Dis,这个时候我们来看效果啊,我先把这个之前的文件给它删掉。删掉它。啊,OK,没啥问题,我们直接来编。编译完了以后的话,其实我们再看你看src里边就不会产生新的文件了,而是在哪呢?我们是不是多了一个目录啊,所有的GS文件都放到了这个Dis的目录里啊,也这也就是把我们这个源码和我们这个编译后的代码给它分离了啊,给它分开啊,分开存放。好,那这个就是我们这个out啊out这个没什么好说的啊,比较的简单,然后还有一个我们叫做out。
16:05
Out file out file什么呢?Out file是我们这个输出的文件,哎,那你out是目录,Out file是文件,Out是干嘛的呢?就是诶它可以干嘛呢?它可以用来啊将我们这个代码合并,为什么呢?一个文件啊,它可以用来将我们这个代码合并成一个文件,你看现在我的这个app.ts还有m.tS它是不是分别整出了两个文件,哎,一个是这个,一个是这个玩意儿啊,那这里面我们稍微调整一下啊,调整一下我把这个m.tS里边导出这个。模块啊,我先给去了啊,先给去了,这我都给它注了啊,都给它注了M里边呢,我这直接来一个,诶light一个这个B,诶等于20,然后light一个C等于一个这个hello,我随便写俩变量啊,随便写俩变量,然后呢,我们来一个b.log然后这来一个这个C,打印一下B还有C,然后它这个APP里边呢,我们打印一下A,我先这么写啊,先这么写,然后呢,Out file这我写一下啊鞋盖diss的下边我们来一个点,那这个是什么意思,这就表示我要把我的编译后的文件合并到这个点当中,那我们这个时候我把这东西先删了,把目录直接删了。
17:23
删了删完了以后,我这再执行一下这个编译啊,直接执行一下编译,我们来看效果,这个时候它的效果实际产生了一个效果,诶我这还报错了out。他这个,诶,你看我们这儿是不是已经编译出来了,先不管它这个错误啊,这个错我们先不说它,咱们现在来看,现在我们再看它编译完的GS文件是不是就是只有一个了,哎,也就是它把两个TS文件编译成了一个GS文件啊,我们来看看这个GS文件打开以后你发现什么了,Light a等于十,这个是我们APP里边的代码,然后cancel log是不是APPGS代码,然后下边一个light b等于20 let c等于hello,然后cancel一个B号C,这是们m.tS代码,它就是把我们这个两个TS文件里代码给它合并到了一起啊,合并到一起,所以这个时候注意设置我们这个out file以后。
18:28
后啊,我们所有的所有的这个什么呢?呃,所有的这个诶,全局作用域中。诶作用域中的这个代码它会什么呢?会合并到我们这个,诶同一个文件中,它就说白了就直接给你进行合并了啊合并了,但是你说老师刚才你为什么把这个模块化你给它撤了呀,你把这模块给它加上,把模块化给它加上以后啊,它就有点小不一样了,因为这个模化如果你直接给它合并的话,它这里边实际上它还,诶不是这个文件,是我们这个TS文件,哎模块化里边代码你直接给它整的话,它其实它不好合并,也就是默认情况下,它的合并只是什么呢?就是把全局作用运动代码合并到同一个文件,但是如果你用了模块化的话,你这个时候你就合并不上了,实际上这个错误信息我们看这就给你提示了,你看什么呢?Only and system suppose alongside out file也就是什么意思呢?如果你要想把多个模块给它合并成一个文件,你必须使用什么模块化规范必须。
19:38
得是am者是,所以这个如果你要想合并个需个换成换成。System,这个时候你再编译它就不会报错了啊,就不会报错了,我们来看效果,诶是不是就没有错误了,没有错误了,同样也是就用这个system模化规范,把我们这两个文件合并成了一个,里边的细节我们就不看了,这个file的话,其实我们在这儿的话,一般我们页用的不多,你说老师合并成一个文件多好啊,它有点不灵活,因为后边的话,其实我们一般这种东西我们要用的话,都会结合一些打包工具去做,实际上这种事儿都应该是交给包工具去给我们做的,所以后边我们在讲的时候会说怎么去结合打包工具实现这个功能,所以这个out file的话,我们就诶了解一下,知道一下,诶有这个东西就可以了啊,有这个东西就可以了,好,那这个是我们说的这几个属性啊,我们先来回顾一下吧,这也没少说了,说了什么呢?说了一个target啊,Target也就是我们的ES带GKS代码要编译成这个GS一个版本。
20:49
还有一个是我们这个modu modu就是我们要用的模块化的一个规范这个东西,这两个东西我们是基本上是并用的,但是一般的话值都是ES2015,一般的值都是E2015,然后的话,Out是我们的输出目录,Out是我们输出的一个文件,这两个东西的话,其实呃,它不是必须用的,但是你得知道啊,知道它还有一个Li指定的我们要用的这个哎库啊,这个库好,这个是我们先说的第一部分,我们先停一下。
我来说两句