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


尽管 Deno 没有官方支持对 Node.js 的向后兼容性 , 但也有许多库和应用程序可以正常用于 Deno 。 有些是开箱即用的 , 而另一些则需要一些准备工作 。
InfoQDeno 1.0 即将发布,你需要知道的都在这里了
本文插图
安装第三方模块
Deno 刚诞生不久 , 其生态系统仍在初步发展阶段 。 在撰写本文时 , 我建议将 Pika 作为在标准库和用户库之后开始寻找兼容模块的第一站 。
Pika 的开发人员已与 Deno 合作 , 通过称为 X-TypeScript-Types 的 ECMAScript 模块提供了 TypeScript 类型 。 要使用 Pika 查找包:
在 https://www.pika.dev/search 搜索你要的包
寻找兼容的模块 。 在撰写本文时 , 搜索 react 的结果如下:
Package found! However, no web-optimized "module" entry point was found in its package.json manifest.
但 preact 是兼容的 。 点击它 , 然后点击导入 。 你应该能看到以下内容:
InfoQDeno 1.0 即将发布,你需要知道的都在这里了
本文插图
将 import 语句复制到你的代码中 。
import * as pkg from "https://cdn.pika.dev/preact@^10.3.0";
7超越 Package.Json
大多数 JavaScript 生态系统还是围绕 package.json 建立的 。 它已经膨胀得很大了 , 其中包含许多职责 , 诸如:
保留项目的元数据
列出项目依赖项和版本控制
将依赖项分类为 dpendencies 或 devDependencies
定义程序的入口点
存储与项目相关的 Shell 脚本
定义一个类型类别 , 最近被引入以改进 ECMAScript 模块支持:
{"name": "Project Name", // metadata"version": "1.0.0", // metadata"description": "My application", // metadata"type": "module", // module functionality"main": "src/mod.ts", // module functionality"scripts": {"build": "npm run _copy-build-files && rollup -c","build-watch": "npm run _copy-build-files && rollup -cw"}, // scripting functionality"license": "gpl-3.0", // metadata"devDependencies": {"@rollup/plugin-typescript": "^3.1.1","rollup": "^1.32.1","typescript": "^3.8.3"}, // versioning and categorizing functionality"dependencies": {"tplant": "^2.3.3"} // versioning and categorizing functionality}
所有这些实践随着时间的流逝而融合在一起 , 现在成为了 JavaScript 生态系统的标准运作方式 。 但我们很容易忘记这并不是官方标准的事实;只有当这些功能成为必需品时才会想到它 。 现在 JavaScript 已经迎头赶上 , 是时候重新思考了 。 Deno 仍无法取代 package.json 的所有功能 , 但目前有一些解决方案 。
使用 deps.ts 和 URL 进行版本控制
针对包版本控制有一个 Deno 约定 , 那就是使用名为 deps.ts 的一种特殊文件 。 在内部 , 依赖项被重新导出 。 这就能让应用程序中的不同模块都引用相同的源 。
不是告诉 npm 要下载哪个模块版本 , 而是在 deps.ts 中的 URL 中引用 。
export { assert } from "https://deno.land/std@v0.39.0/testing/asserts.ts";export { green, bold } from "https://deno.land/std@v0.39.0/fmt/colors.ts";
如果要更新任何模块 , 你可以在 deps.ts 中更改 URL 。 例如 , 将 @v0.39.0 替换为 @v0.41.0 , 之后新版本将在所有位置上启用 。 如果你改为直接将 https://deno.land/std@v0.39.0/fmt/colors.ts 导入每个模块 , 你就得费劲地遍历整个应用程序并更改每个引用 。 " 你之前下载的模块以后不会被篡改 " 这种假设可能会带来安全风险 。 所以我们还可以选择创建锁定文件 。 这将确保新下载的模块与你最初下载的模块是一样的 。