Node.js的包管理工具是npm,而对于Deno而言,任何一个资源服务器都可以是资源的提供方,一般来说,它是一个CDN网站。
除了比较知名的用来转换Node.js包的cdn.skypack.dev/和esm.sh/之外,官方的CDN地址是这里:deno.land/x。
如何发布模块
如何发布一个Deno的模块?
操作其实很简单。
Which events would you like to trigger this webhook?
的最后一项。只勾选第一个。需要注意的一点是,Deno对个人发布模块的数量限制为15个,超过需要向管理员发邮件(modules@deno.com)申请,所以没事儿不要发垃圾的包上去,撤销也是需要向管理员申请的,而且也不一定会通过。
快速发布
一般情况下,我们需要在根目录下创建一个README.md,说明你的模块功能与使用方法。
以我的工程oak_nest为例,通常有段使用示例:
import {
Body,
Context,
UseGuards,
} from "https://deno.land/x/oak_nest@v1.2.1/mod.ts";
示例里有你的模块地址,这个地址的版本号如果每次发布都要手动修改,那就太麻烦了。
全局安装一个命令:
deno install --allow-read --allow-write --allow-run --unstable -n tag -f https://deno.land/x/jw_cli@v0.5.1/cli/tag/mod.ts
在根目录下创建一个deno.json文件,内容大致如下:
{
"name": "xx_test",
"version": "0.0.1",
}
之后就可以使用tag来更新版本,并推送到服务器。详细说明具体见文档。
版本更新
版本号更新的命令使用patch/minor/major,逻辑与Node.js的npm version
一致,它会更新deno.json[c]
文件中的版本号。
tag
tag patch # 与上面等价
tag minor
tag major
它会同时更新根目录下的deno.json[c]
文件和README.md
,如果后者有使用deno.json[c]
中配置的name
,将会对应替换。
比如工程的名称为oak_nest
,deno.json[c]
中version为1.2.1
,README.md中oak_nest@v1.2.1
会对应替换:
执行tag
或tag patch
后,替换为oak_nest@v1.2.2
;
执行tag minor
后,替换为oak_nest@v1.3.0
;
执行tag major
后,替换为oak_nest@v2.0.0
。
版本号不以v开头
假设你推送的tag版本号不想以v开头,那么可以添加一个参数-L或者--local:
tag patch -L
添加自定义信息
打标签时默认提交信息是版本号,如果想自定义信息,可以使用-M或者--msg:
tag minor -M "feat: change some"
更新所有目录的README.md文件
如果想要更新所有目录的README.md文件,可以使用-D或者--deep:
tag -D
本地调试
如果你的另一个项目中使用这个模块,那可能会遇到调试问题,如果每次发布都推送一次,那太不合理了(虽然你可以这么干,github的hooks也是秒级的)。
你可以在本地启动一个服务器。
deno install --allow-net --allow-read https://deno.land/std@0.125.0/http/file_server.ts
$ file_server .
Downloading https://deno.land/std@0.125.0/http/file_server.ts...
[...]
HTTP server listening on http://0.0.0.0:4507/
deno run -A aa.ts
现在需要换成:
deno run -A --reload=http://localhost:4507/ aa.ts
不然永远用的是旧的代码。
当然,你也可以用vscode安装一个插件live server,怎么使用就不赘述了。
总结
本文介绍了如何利用GitHub的hooks来发布一个Deno模块到deno.land上,如何快速更新版本,如何本地调试。