以同样的方式,TS模块,JSON模块等也是相同的过程,因此我们只需要修改模块的方法。
例如,我们在上面注册TS处理功能,以便在处理TS模块时调用此方法,因此我们可以在此处进行编译。这是可以直接执行TS的TS节点的原理。
Node.js提供了REPL模块,以创建读取,评估,打印和循环的命令行交互环境,这是回答的方法。TS节点还支持替补模式。它可以直接编写TS代码,然后执行它。原理是基于REPL模块的扩展名。
REPL的API就是这样:通过开始方法创建一个repl交互,您可以指定提示提示,您可以自己实现评估处理逻辑:
重复执行时有一个上下文。这是R.Context。我们在此上下文中执行代码以使用VM模块:
这两个模块的组合可以意识到一个问题和一个答案的命令行交互作用,并且在放置评估时也可以完成TS的汇编,以便直接执行TS代码。
TS的编译主要使用TSC的命令行工具,但实际上它也提供了称为TS编译器API的编译API。当我们使用工具时,我们需要直接调用编译器API进行编译。
这是将TS代码转换为JS代码的API是:
当然,TS还提供了类型检查的API,因为有很多参数,我们在以下文章中这样做。在这里,我们只了解转骨模块的API。
在理解了需要挂钩,repl和vm,ts编译器API的三个方面的三个方面之后,TS节点实现原则的原理将出现,我们将接下来意识到这一点。
我们可以使用TS节点 +某个TS文件直接执行此TS文件。它的原则是修改要实施的Requis的要求。
在“需求挂钩”中进行TS汇编,然后直接执行已编译的JS,以达到直接执行TS文件的效果。
因此,我们重写该方法,读取其中的文件内容,然后调用TS.TransPileModule将TS变成JS,然后调用Module._Compile来处理编译的JS。
这样,我们可以直接执行TS模块。特定模块路径通过命令行参数执行。可以使用process.argv进行。
我们准备TS文件测试。TS:
然后使用此工具钩进行运行:
可以看出,TS已成功实现,这是TS节点的原理。
当然,细节有很多逻辑,但主要原则是“需要挂钩 + TS编译器API”。
TS节点支持启动一个重型环境,与TS代码进行交互,然后执行。它的原理是基于Node.js.vm.runincontext API提供的REPL模块的扩展名,在REPP的上下文中执行JS代码。
我们还启动了一个重型环境,以设置提示和自定义评估实现。
评估的实现是将TS代码编译为JS,然后使用VM.RuninContext执行编译的JS代码。上下文执行被指定为复制的上下文:
同时,我们还可以在REPL的上下文中进行一些扩展,例如注射环境变量:
让我们测试效果:
可以看出,在执行执行后,激活了一个重型环境,并将提示修改为-.->。您可以直接执行TS代码,也可以访问全局变量。
这是TS节点的复制模式的近似原理:REPL + VM + TS编译器API。
所有代码如下:
TS节点可以直接执行TS代码,而无需手动编译。为了深入理解它,我们实现了一个简单的TS节点,该节点支持直接执行和复制模式。
直接执行的原理是通过require Hook(即Module._extExtensions [ext]转换代码,然后在代码之后执行它,然后执行它。此效果可以直接执行TS代码。
REPL的原理是基于node.js repl模块的扩展名。它可以自定义提示,上下文,评估逻辑等。我们将其与ts编译器API进行编译,然后通过vm.runincontextlater js.s.s.s.ss.直接在卧斗中执行。
当然,完整的TS节点有很多细节,但是我们已经理解了该原则,我们还学习了诸如require Hook,repl和VM模块的知识,TS编译器API。
实际上,TS节点的原则是由同学编写的。您还可以告诉我,您是否拥有要阅读的Nodejs工具的源代码(可以将我添加到微信中)。有些过滤。