手把手教你发布一个Deno模块

2023年 7月 19日 38.5k 0

Node.js的包管理工具是npm,而对于Deno而言,任何一个资源服务器都可以是资源的提供方,一般来说,它是一个CDN网站。

除了比较知名的用来转换Node.js包的cdn.skypack.dev/和esm.sh/之外,官方的CDN地址是这里:deno.land/x。

如何发布模块

如何发布一个Deno的模块?

操作其实很简单。

  • 前提是你有一个GitHub账号,新建一个对外开放的工程。
  • 发布前,在你的工程里,最好先配置好标签与描述。标签用来在deno.land中搜索,描述便于其他开发者了解你的用图。
  • image.png

  • 回到deno.land/x页面。image.png点击**Publish a module,**出现以下弹窗:
  • image.png

  • 点击下一步image.png
  • 填写一个唯一的模块名称,比如xx_test。如果没有重复的,就可以点击下一步。
  • 填写要发布的工程中文件夹路径,一般情况下我们都是根目录,不填即可。
  • image.png

  • 下一步是提示页面image.png
  • 按上一步的提示一步步就可以完成了。这里我再详细点,到我们的github工程,找到设置-Webhooks,点击增加webhook按钮。image.png
  • 填写Payload URL为提示页面的地址;修改Content-type为application/json。image.png
  • 选择Which events would you like to trigger this webhook?的最后一项。只勾选第一个。image.png
  • 点击Add webhook按钮image.png
  • 页面会自动回到这里,看到有了一条记录。image.png
  • 点击编辑,会有2个tab页,第一个就是你刚才配置的页面,第二个是你以后所有hooks的状态。如果失败了,可以在这里看详细信息。image.png
  • 你的工程使用git打标签,如git tag -a v0.0.1 -m "feat: xxx",推送到github,就会触发hooks。
  • 回到deno.land/x,在下面就能看到你新推送的模块了(官网改版后已经没有了,需要你自己搜索)。image.png
  • 点击你的带版本号的工程,可以看到弹出的地址是deno.land/x/xx_test@v…
  • 需要注意的一点是,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_nestdeno.json[c]中version为1.2.1,README.md中oak_nest@v1.2.1会对应替换:

    执行tagtag 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也是秒级的)。

    你可以在本地启动一个服务器。

  • 全局安装file_server
  • 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/
    
  • 这样打开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上,如何快速更新版本,如何本地调试。

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论