使用 Deno 构建脚本和 CLI
为什么选择 Deno?
使用 Deno 编写脚本快速、简单、高效。无需单独安装依赖、配置 TypeScript、设置 linter、formatter、测试运行器或工具链的任何其他部分。
例如,您可以在第一次运行脚本时直接编写 TypeScript、安装模块及其类型定义
import cowsay from "npm:cowsay@1.5.0";
let output: string = cowsay.say({ text: "Hello from typescript!" });
console.log(output);
当我们第一次运行它时,它会安装所有依赖项并将其缓存起来
$ deno run --allow-read main.ts
________________________
< Hello from typescript! >
------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Web 平台 API
使用 Deno 编写脚本更简单,因为它具有内置的 Web 平台 API。这使得访问网络、解析 HTTP 响应等操作变得简单直观。
const res = await fetch("https://examples.deno.land/hello-world.ts");
const text = await res.text();
console.log(text);
运行此脚本时,我们看到脚本的主体
$ deno run --allow-net main.ts
console.log("Hello, World!")
那么 Node.js 呢?
Node.js 不使用 Web 平台 API,因此您需要导入 `node:http` 或第三方依赖项才能访问网络和发出 HTTP 请求。了解更多关于这如何导致 JavaScript 臃肿、依赖项问题等。共享与分发
Deno 可以通过 URL 执行程序和脚本,因此共享您的脚本就像将其托管在 gist.github.com 上一样简单。一个脚本示例是https://examples.deno.land/hello-world.ts,您可以从 URL 运行它
$ deno run https://examples.deno.land/hello-world.ts
Hello, World!
那么 Node.js 呢?
在 Node.js 中,共享一个简单的 JavaScript 脚本需要一个 `package.json` 形式的依赖项清单文件。Deno 的构建方式类似于浏览器——它可以简单地从 URL 运行任何脚本。了解 Node 与浏览器和 Web 标准的背离如何导致不必要的复杂性。如果您想将 JavaScript 或 TypeScript 程序作为二进制文件共享,Deno 的一体化现代工具链包含deno compile
,这使得将您的脚本编译成可在所有主流平台上共享的单个可移植二进制文件变得容易。
$ deno compile --allow-net ./main.ts
Compile file:///deno/main to main
$ ./main
console.log("Hello, World!")
附加资源
这里有一些关于使用 Deno 编写脚本或 CLI 的示例、博客文章和视频。
- Homebrew 的创建者如何使用 tea 和 Deno 简化软件分发
- Deno 中的不可变脚本如何让 Windmill.dev (YC S22) 构建生产级运维
- dax — 受 zx 启发的 Deno 跨平台 shell 工具