栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

deno vs ts-node:有什么区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

deno vs ts-node:有什么区别

TL; DR

Deno更像Node而不是ts-node,也就是说,它是基于V8的JS运行时。与Node不同,Deno包含Typescript编译器。Deno不是Node/ npm生态系统的一部分。

ts-node是一个Node.js模块,它使用Typescript编译器来转换Typescript代码并在Node中运行它。ts-node是Node /npm生态系统的一部分。

迪诺很快。见下文。

Deno和ts-node的相似之处

  • 它们都运行Typescript代码
  • 它们都可以在Linux,Mac和Windows上运行(但ts节点也可以在SmartOS和AIX上运行)
  • 它们都使用Google V8 Javascript引擎(ts-node通过其在后台使用的节点)

Deno和ts-node的差异

ts node

  • ts-node是一个Node.js模块
  • 它是用Node.js编写的
  • 它与npm一起安装
  • 它使用Typescript编译器作为对等依赖项
  • 它安装自己的依赖项
  • 作为运行时,它使用使用libuv用C ++编写的Node

deno

  • deno是一个独立的可执行文件
  • 它不使用Node.js
  • 它作为一个二进制文件分发
  • 它包含Typescript编译器作为V8快照
  • 它没有依赖性
  • 它是使用Tokio用Rust编写的运行时

Maturity

ts-node

ts-node依赖于Node.js运行时,因此可以将其包含在此处:

  • Node.js于2009年发布,最新的LTS版本是10.15.3
  • npm于2010年发布,Node LTS中包含的版本为6.4.1
  • ts-node于2015年发布,最新版本是8.0.3

Deno

Deno本身是一个运行时,因此不使用其他任何东西:

  • Deno于2018年发布,最新版本是1.0 请在此处查看最新版本

人气度

GitHub:

  • nodejs /节点
  • 类型强/ ts-node
  • 狄兰

Libraries

ts-node

您可以使用npm上所有可用的Node库

(目前,npm上有955,263个软件包,并非全部用于Node,但数量仍然很多)

npm上可用的Node库,即使它们最初是用Typescript编写的,也通常以转换为Javascript的形式发布,并在

*.d.ts
文件中包含附加的类型定义(包含在npm包中或与
@types
名称空间分开安装)。

天野

有55个第三方模块https://deno.land/x/和56个库和工具上https://github.com/denolib/awesome-deno#modules(我没有检查,如果一切都是一样的)

Deno库只是Typescript文件。

安装差异

ts node

  • 您安装Node.js
    • https://nodejs.org/en/download/
    • Mac和Linux上的v10(当前LTS)在4500个文件中约为65MB
  • 您安装
    typescript
    ts-node
    与他们的依赖关系
    npm
    • npm install typescript ts-node
    • 它安装了10个npm模块,并将44MB的212个文件放入
      node_modules

deno

  • 您下载一个二进制文件
    • https://github.com/denoland/deno/releases
    • 在Mac和Linux上,v0.3.6的未压缩二进制文件分别约为47MB和41MB

您的代码差异

ts node

  • 您的代码的工作方式与经过编译
    tsc
    和运行的代码相同
    node
    (因为它在后台)
  • 您可以使用Node API
  • 您可以使用所有内置的Node模块
  • 您可以使用npm中的模块
  • 您可以
    import
    使用相对路径(通常不带
    .ts
    后缀)来归档
  • 您可以
    import
    在中使用
    npm
    (或
    yarn
    )安装的依赖项
    node_modules

Deno

  • 您的代码与Node中的代码工作方式不同(因为它未与Node一起运行)
  • 您使用Deno API
  • 您可以使用Deno内置模块
  • 您可以使用其他可用的Deno模块
  • 您可以
    import
    使用相对路径(总是带
    .ts
    后缀!)来归档
  • 您可以
    import
    直接从网络获取网址(无需
    npm install

例子

这是发布并使用Typescript编写的最小库的示例。

使用Node和ts-node创建和使用Typescript库

这就是我现在在以下示例项目中正在做的事情:

https://github.com/rsp/node-ts-hello

创建库:

  1. 查找一个在npm上免费的名称(不再足够,请参见下文)
  2. 在GitHub上创建仓库
  3. 创建
    package.json
    npm init
  4. 用以下命令安装Typescript编译器
    npm install typescript
  5. 决定您是否保留
    package-lock.json
    回购协议(有优缺点)
  6. 创建一个
    src
    目录,您将在其中保存Typescript文件
  7. 添加
    hello.ts
    src
  8. 添加

    tsconfig.json
    文件,并确保:

    • 添加
      "src*"
      "include"
    • 将依赖项和您自己的类型添加到
      "paths"
    • 添加
      "outDir": "dist"
      以将JS文件放置在已知位置
    • dist
      目录添加到,
      .gitignore
      以便编译后的文件不在git中
    • 添加与in相同

      .gitignore
      不包含
      dist
      in的内容
      .npmignore

      (否则,您将不会发布最重要的文件,请参见下文)

    • 添加,

      "declaration": true
      以便您
      *.d.ts
      生成文件

    • "main": "dist/hello.js"
      package.json
      (注意这个“JS”后缀)
    • "types": "dist/hello.d.ts"
      package.json
      (注意,“TS”后缀)
    • 添加
      "build": "tsc"
      package.json
      (注意冗余文件,请参见下文)
    • 使用登录
      npm login
      (您不应该一直登录-请参阅:现在推送恶意软件:NPM软件包开发人员登录受编码器欢迎的黑客入侵的原因)
    • 用…编译项目
      npm run build
    • 与发布包
      npm publish
    • 当您收到时,
      npm ERR! publish Failed PUT 401
      您需要登录
      npm login
    • 当您得到
      npm ERR! publish Failed PUT 403
      的软件包可能与现有软件包“太相似”时,请尝试在package.json中重命名该软件包,重命名该存储库,并将所有lik更新为自述文件,然后发出itp。在package.json中
    • 从npm注销
      npm logout
    • 看到您的
      ~/.npmrc
      并确保您没有剩下的像这样的东西:
    • //registry.npmjs.org/:_authToken=...

在其他项目中使用库

ts-node

  1. 创建一个新目录
  2. 用创建
    package.json
    文件
    npm init
    • (以便您可以在本地为新程序安装依赖项)
  3. 用以下命令安装我们的库
    npm install node-ts-hello
  4. 可选地安装ts-node与
    npm install typescript ts-node
    • (除非已全局安装)
  5. 添加使用以下
    hi.ts
    命令导入我们的库的文件:
    • import { hello } from 'node-ts-hello';
    • hello('TS');
  6. 使用
    npx ts-node hi.ts
    (如果ts-node是本地安装的)或
    ts-node hi.ts
    (如果ts-node是全局安装的)运行它
    • 如果遇到错误,请参见下文

潜在问题:我将上述内容简化了一些,此处介绍了创建该库的实际过程。

使用Deno创建和使用Typescript库

这就是我现在在以下示例项目中正在做的事情:

https://github.com/rsp/deno-hello

创建库:

  1. 在GitHub上创建仓库
  2. 放入
    hello.ts
    回购

使用库:

  1. 创建一个
    hi.ts
    包含以下内容的文件:
    • import { hello } from 'https://raw.githubusercontent.com/rsp/deno-hello/master/hello.ts';
    • hello('TS');
  2. 使用以下命令运行程序
    deno run hi.ts

第一次运行将打印:

$ deno run hi.ts Compiling file:///Users/rsp/talks/deno/hello-deno-test/hi.tsDownloading https://raw.githubusercontent.com/rsp/deno-hello/master/hello.tsCompiling https://raw.githubusercontent.com/rsp/deno-hello/master/hello.tsHello, TS!

第二次运行:

$ deno run hi.ts Hello, TS!

如果更改

hi.ts
,它将重新编译,但是依赖项将不会再次下载:

$ deno run hi.ts Compiling file:///Users/rsp/talks/deno/hello-deno-test/hi.tsHello, TS!

(请注意,

touch hi.ts
这还不够,您需要进行实际更改,因为Deno会检查文件校验和,而不是时间戳。)

Speed

ts-node

hi.ts
从上面的示例启动ts节点版本的速度:

$ time npx ts-node hi.ts Hello, TS!real    0m0.904suser    0m1.300ssys     0m0.083s

这是在已经安装了依赖项之后,并且在运行了几次之后以确保所有缓存都能正常工作。差不多一秒钟。

hi.ts

hi.ts
从上面的示例中启动我们的Deno版本的速度:

$ time deno run hi.ts Hello, TS!real    0m0.028suser    0m0.010ssys     0m0.015s

这也是在已经安装了依赖项之后以及在运行了几次以确保所有缓存都能正常工作之后。

速度提高了32倍以上。

摘要

与Deno相比,应该将Deno与Node进行更多的比较,

ts-node
因为Deno是一个全新的运行时,而它
ts-node
是Node的模块,因此您的程序
ts-node
实际上使用Node运行时来运行。

这是一个非常年轻的项目,但已经吸引了很多人。它没有Node那样多的文档或库,但这意味着它可能是参与其中的最佳时机,因为当它变得更流行时,我认为由于许多原因,这超出了此答案的范围,像Node一样,将需要在市场上拥有丰富经验的人。

程序启动速度已经非常令人印象深刻,我希望在那里能有更多的改进。

使用而无需像配置单个文件的开发速度

package.json
node_modules
一起的可能性,以直接导入相依从的网址(例如在前端),将有可能对工作既为最终用户代码和库以不同的方式。我们将看到它在实践中是如何工作的,但看起来已经很有希望。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452490.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号