我正在从事一个相对较大的打字稿项目,正在ts-node
用于运行节点测试和示例。据我了解,ts-node
将ts
文件编译为js
文件并执行。
最近,我听说了deno
,这是一个打字稿运行时。我在typescript中尝试了一些示例,该示例可以使用ts- node
。我使用来运行示例deno
,控制台中印有许多编译消息,然后执行代码。后来我发现中有缓存文件/username/.deno
。我觉得deno
执行速度不会比ts- node
这似乎都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
名称空间分开安装)。
有55个第三方模块https://deno.land/x/和56个库和工具上https://github.com/denolib/awesome-deno#modules(我没有检查,如果一切都是一样的)
Deno库只是TypeScript文件。
typescript
并ts-node
与他们的依赖关系npm
npm install typescript ts-node
node_modules
tsc
和运行的代码相同node
(因为它在后台)import
使用相对路径(通常不带.ts
后缀)来归档import
在中使用npm
(或yarn
)安装的依赖项node_modules
import
使用相对路径(总是带.ts
后缀!)来归档import
直接从网络获取网址(无需npm install
)这是发布并使用TypeScript编写的最小库的示例。
这就是我现在在以下示例项目中正在做的事情:
https://github.com/rsp/node-ts-hello
创建库:
package.json
与npm init
npm install typescript
package-lock.json
回购协议(有优缺点)src
目录,您将在其中保存TypeScript文件hello.ts
到src
添加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 logout
~/.npmrc
并确保您没有剩下的像这样的东西: //registry.npmjs.org/:_authToken=...
在其他项目中使用库 ts-node
package.json
文件npm init
npm install node-ts-hello
npm install typescript ts-node
hi.ts
命令导入我们的库的文件:
import { hello } from 'node-ts-hello';
hello('TS');
npx ts-node hi.ts
(如果ts-node是本地安装的)或ts-node hi.ts
(如果ts-node是全局安装的)运行它
潜在问题:我将上述内容简化了一些,此处介绍了创建该库的实际过程。
这就是我现在在以下示例项目中正在做的事情:
https://github.com/rsp/deno-hello
创建库:
hello.ts
回购使用库:
hi.ts
包含以下内容的文件:
import { hello } from 'https://raw.githubusercontent.com/rsp/deno-hello/master/hello.ts';
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会检查文件校验和,而不是时间戳。)
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
一起的可能性,以直接导入相依从的网址(例如在前端),将有可能对工作既为最终用户代码和库以不同的方式。我们将看到它在实践中是如何工作的,但看起来已经很有希望。
问题内容: 我在机器上安装了node.js(Linux Mint 15),运行时显示: 那么node和nodejs有什么区别?我之前已经安装了node.js和node,但是当我运行时,Web服务器根本无法启动。所以我删除了node并保留了node.js。 问题答案: 包节点与node.js不相关。 是您想要的,但是可以将命令称为node更好,以与使用的脚本兼容。 您可以只在路径中创建一个符号链接:
问题内容: 我已经从nodejs.org上提供的tar文件中解压了node.js,但是当我尝试通过node命令执行我的js程序时,什么也没发生,但是另一方面,nodejs命令运行会执行该文件。 所以我的问题是 ,node命令和nodejs命令之间 有什么 区别, 因为我 不是从源代码构建的,这 会影响我的程序 。 我的原因就是这种差异。 问题答案: 这在很大程度上取决于许多因素。主要是,要看是什么
问题内容: 节点应用程序要求我运行带有和声标志的节点,例如: 什么是和声旗?它有什么作用?没有它,应用程序为什么无法运行? 我尝试查看节点命令行选项(),但也未提供任何详细信息。节点文档也没有任何帮助。 问题答案: 在和声标志上输入以下内容: 因此,启用所有和谐功能(例如,等)的捷径是本博客文章中的一种,看来和谐启用了该语言的ECMAScript 6新功能。文件无法和谐运行的原因是可能使用了新EC
问题内容: 两者都意味着空间,但是有什么区别吗? 问题答案: 一个是不间断空间,另一个是常规空间。不间断的空格表示该行不应在该点处换行,就像它不会在一个单词的中间换行一样。 此外,正如斯文德(Svend)在其评论中指出的那样,不间断的空间不会崩溃。
本文向大家介绍<%# %> 和 <% %> 有什么区别?相关面试题,主要包含被问及<%# %> 和 <% %> 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 答:<%# %>表示绑定的数据源 <%%>是服务器端代码块
发展至今(2020 年 6 月份),GCC 编译器已经更新至 10.1.0 版本,其功能也由最初仅能编译 C 语言,扩增至可以编译多种编程语言,其中就包括 C++ 。 除此之外,当下的 GCC 编译器还支持编译 Go、Objective-C,Objective-C ++,Fortran,Ada,D 和 BRIG(HSAIL)等程序,甚至于 GCC 6 以及之前的版本还支持编译 Java 程序。但本