我正在从事一个相对较大的打字稿项目,正在ts-node用于运行节点测试和示例。据我了解,ts-node将ts文件编译为js文件并执行。
ts-node
ts
js
最近,我听说了deno,这是一个打字稿运行时。我在typescript中尝试了一些示例,该示例可以使用ts- node。我使用来运行示例deno,控制台中印有许多编译消息,然后执行代码。后来我发现中有缓存文件/username/.deno。我觉得deno执行速度不会比ts- node
deno
ts- node
/username/.deno
这似乎都deno和ts-node编译和使用高速缓存运行。它们之间有什么区别?
Deno更像Node而不是ts-node,也就是说,它是基于V8的JS运行时。与Node不同,Deno包含TypeScript编译器。Deno不是Node/ npm生态系统的一部分。
ts-node是一个Node.js模块,它使用TypeScript编译器来转换TypeScript代码并在Node中运行它。ts-node是Node /npm生态系统的一部分。
迪诺很快。见下文。
ts-node依赖于Node.js运行时,因此可以将其包含在此处:
Deno本身是一个运行时,因此不使用其他任何东西:
GitHub:
您可以使用npm上所有可用的Node库
(目前,npm上有955,263个软件包,并非全部用于Node,但数量仍然很多)
npm上可用的Node库,即使它们最初是用TypeScript编写的,也通常以转换为JavaScript的形式发布,并在*.d.ts文件中包含附加的类型定义(包含在npm包中或与@types名称空间分开安装)。
*.d.ts
@types
有55个第三方模块https://deno.land/x/和56个库和工具上https://github.com/denolib/awesome-deno#modules(我没有检查,如果一切都是一样的)
Deno库只是TypeScript文件。
typescript
npm
npm install typescript ts-node
node_modules
tsc
node
import
.ts
yarn
npm install
这是发布并使用TypeScript编写的最小库的示例。
这就是我现在在以下示例项目中正在做的事情:
https://github.com/rsp/node-ts-hello
创建库:
package.json
npm init
npm install typescript
package-lock.json
src
hello.ts
添加tsconfig.json文件,并确保:
tsconfig.json
"src/**/*"
"include"
"paths"
"outDir": "dist"
dist
.gitignore
添加与in相同.gitignore但 不包含 dist in的内容.npmignore (否则,您将不会发布最重要的文件,请参见下文)
.npmignore
添加,"declaration": true以便您*.d.ts生成文件
"declaration": true
"main": "dist/hello.js"
"types": "dist/hello.d.ts"
"build": "tsc"
npm login
npm run build
npm publish
npm ERR! publish Failed PUT 401
npm ERR! publish Failed PUT 403
npm logout
~/.npmrc
//registry.npmjs.org/:_authToken=...
在其他项目中使用库 ts-node
npm install node-ts-hello
hi.ts
import { hello } from 'node-ts-hello';
hello('TS');
npx ts-node hi.ts
ts-node hi.ts
潜在问题:我将上述内容简化了一些,此处介绍了创建该库的实际过程。
https://github.com/rsp/deno-hello
使用库:
import { hello } from 'https://raw.githubusercontent.com/rsp/deno-hello/master/hello.ts';
deno run hi.ts
第一次运行将打印:
$ deno run hi.ts Compiling file:///Users/rsp/talks/deno/hello-deno-test/hi.ts Downloading https://raw.githubusercontent.com/rsp/deno-hello/master/hello.ts Compiling https://raw.githubusercontent.com/rsp/deno-hello/master/hello.ts Hello, TS!
第二次运行:
$ deno run hi.ts Hello, TS!
如果更改hi.ts,它将重新编译,但是依赖项将不会再次下载:
$ deno run hi.ts Compiling file:///Users/rsp/talks/deno/hello-deno-test/hi.ts Hello, TS!
(请注意,touch hi.ts这还不够,您需要进行实际更改,因为Deno会检查文件校验和,而不是时间戳。)
touch hi.ts
hi.ts从上面的示例启动ts节点版本的速度:
$ time npx ts-node hi.ts Hello, TS! real 0m0.904s user 0m1.300s sys 0m0.083s
这是在已经安装了依赖项之后,并且在运行了几次之后以确保所有缓存都能正常工作。差不多一秒钟。
hi.ts从上面的示例中启动我们的Deno版本的速度:
$ time deno run hi.ts Hello, TS! real 0m0.028s user 0m0.010s sys 0m0.015s
这也是在已经安装了依赖项之后以及在运行了几次以确保所有缓存都能正常工作之后。
速度提高了32倍以上。
与Deno相比,应该将Deno与Node进行更多的比较,ts-node因为Deno是一个全新的运行时,而它ts- node是Node的模块,因此您的程序ts-node实际上使用Node运行时来运行。
这是一个非常年轻的项目,但已经吸引了很多人。它没有Node那样多的文档或库,但这意味着它可能是参与其中的最佳时机,因为当它变得更流行时,我认为由于许多原因,这超出了此答案的范围,像Node一样,将需要在市场上拥有丰富经验的人。
程序启动速度已经非常令人印象深刻,我希望在那里能有更多的改进。
使用而无需像配置单个文件的开发速度package.json或node_modules一起的可能性,以直接导入相依从的网址(例如在前端),将有可能对工作既为最终用户代码和库以不同的方式。我们将看到它在实践中是如何工作的,但看起来已经很有希望。