使用 Deno 构建脚本和 CLI
为什么选择 Deno?
使用 Deno 编写脚本快速、简单且高效。无需单独安装依赖项、配置 TypeScript、设置 linter、格式化程序、测试运行程序或工具链的任何其他部分。
例如,您可以在第一次运行脚本时编写 TypeScript,并安装模块及其类型定义
import cowsay from "npm:[email protected]";
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 呢?
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 呢?
在 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 工具