InfoQDeno 1.0 即将发布,你需要知道的都在这里了( 六 )


如果你的代码使用 DOM , 则需要使用 lib: [“dom”, “esnext”] 提供自己的 tsconfig.json 。 我们将在下面详细介绍 。
格式化
dprint 提供格式化功能 , dprint 是 Prettier 的高性能替代品 , 它复制了所有已有的 Prettier 2.0 规则 。
要格式化一个或多个文件 , 请使用 deno fmt 或 Visual Studio Code 扩展(稍后将详细介绍) 。
编译和打包
Deno 可以使用 deno bundle 从命令行创建一个简单的打包 , 但是它也公开了一个内部编译器 API:
https://deno.land/std/manual.md#compiler-api
因此用户可以创建自己自定义的输出 。 这个 API 现在被标记为不稳定状态 , 因而你需要使用 --unstable 标志 。
尽管 Deno 有一些与 Web 兼容的 API , 但它们并不完整 。 如果要编译任何引用 DOM 的前端 TypeScript , 则需要在编译或打包时告知 Deno 这些类型 。 你可以使用编译器 API 选项 lib 。
index.htmlDocumentReplace metest-dom.tslet greeter: HTMLElement | null = document.getElementById("greeter")!; // Please forgive the Non-Null Assertion Operator
greeter.innerText = "Hello world!";compile.tsconst [errors, emitted] = await Deno.compile("test-dom.ts", undefined, {lib: ["dom", "esnext"], // include "deno.ns" for deno namespaceoutDir: "dist",});
if (errors) {console.log("There was an error:");console.error(errors);} else {console.log(emitted); // normally we would write the file}
下面是终端中生成的发射图输出 。
{ dist/test-dom.js.map: "{\"version\":3,\"file\":\"test-dom.js\",\"sourceRoot\":\"\",\"sources\":[\"file:///home/david/Downloads/deno-arti...", dist/test-dom.js: "\"use strict\";\nlet greeter = document.getElementById(\"greeter\");\ngreeter.innerText = \"Hello world!\";\n..."}
在上面的示例中 , 我们编译了引用 DOM 的 test-dom.ts 文件 。 在 Deno.compile() 中使用 lib 选项会覆盖 Deno 使用的所有 lib 默认选项 , 因而你需要重新添加 esnext 和可选的 deno.ns , 才能使用 Deno 命名空间 。 这一切仍然是试验性的 , 但是我希望 bundle 命令能够发展下去 , 以处理摇树之类的事情 , 并能更像 Rollup.js 。
调试
Deno 具有内置的调试功能 , 但是在撰写本文时 Visual Studio Code 扩展还不支持它 。 要开始调试 , 请按以下步骤手动操作 。
deno run -A --inspect- brk fileToDebug.ts(注意:对模块使用最低权限)
在 Chrome 或 Chromium 中打开 chrome://inspect 。
你会看到下面这样的页面:
InfoQDeno 1.0 即将发布,你需要知道的都在这里了
本文插图
单击“inspect”以连接并开始调试你的代码
文件监视
Deno 使用 Rust notify 库 , 通过 Deno.watchFs() API 内置了文件监视功能 。 Deno 喜欢通过其 API 在后台处理繁重的工作 , 并让用户以自己喜欢的方式实现他们的代码 。 这里没有 --watch 标志 , 而是需要创建自己的实现或使用第三方模块 。
制作自己的文件监视器时唯一需要注意的是防抖(debouncing) 。 这个 API 可以连续快速触发多个事件 , 并且你可能不想多次执行操作 。 用户 Caesar2011 使用 Date.now() , 仅用了 23 行 TypeScript 代码就解决了这个问题:
https://github.com/Caesar2011/rhinoder/blob/master/mod.ts
还有一个更高级的 Deno 文件监视解决方案 , 称为 Denon 。 它相当于 nodemon 。 如果你想监视工作区中的更改并重新运行测试 , 只需输入: