Deno JSR包管理简单了解下

164 阅读3分钟

Deno的包管理工具和软件注册中心JSR(JavaScript Registry),和npm类似.可以在https://jsr.io/中搜索需要的包

PixPin_2024-03-08_16-55-43.png

安装使用

deno add @tlevi/lodash

像导入任何其他 ES 模块一样导入包:

import * as mod from "@tlevi/lodash";

使用方法

npx jsr add @tlevi/lodash
import env from "@tlevi/lodash";
​
env.isPad()

为什么要有JSR

为什么有了 npm 还要做 JSR?

  • ESM 模块现在已经成为标准,CommonJS 正在逐渐被取代。
  • 越来越多不在依靠浏览器运行 JS 运行时的出现。JSR 模块可用于 Node.js、Deno、Bun、Cloudflare Workers 等
  • TypeScript 不仅作为一种带有编译时类型检查的编写 JavaScript 的方式出现,而且作为 TC39 最新 JavaScript 语言特性的测试平台。

JSR 现在的特点:

  • 将 ESM 作为 JavaScript 模块的 web 标准 , 不在支持 CommonJS。
  • 从一开始就为 TypeScript 设计,原生支持 TS 的运行时,会直接使用 TS 文件。
  • 跨运行时支持。JSR 不是为 Node 或 Deno 而生,而是为所有 JS 运行时而生。
  • 兼容 npm。JSR 做了个 npm 兼容层,JSR 并不是 npm 注册表的替代品;而是 它是 npm 的超集。

在 JSR 上发布第一个包

首先看一下JSR包的规则

  • 仅 ESM 模块:JSR 包作为 ESM 模块发布。这意味着您只能发布使用importexport关键字的模块。您无法发布 CommonJS 模块。
  • 支持 npm 包:您可以通过在dependencies您的中指定它们来依赖 npm 包package.json,或者使用npm:诸如 import { cloneDeep } from "npm:lodash@4";.
  • 支持 jsr 包dependencies:您可以通过在 的中指定 JSR 包来依赖 JSR 包,或者使用如下说明符 package.json在代码中引用它们:jsr:``import { encodeBase64 } from "jsr:@std/encoding@1/base64";
  • node:支持内置插件:您可以使用该方案导入 Node.js 内置插件node:。例如,您可以fs使用 导入模块 import { readFile } from "node:fs";。如果您的包有package.json,您还可以使用裸说明符(不带前缀)导入 Node.js 内置程序 node:
  • 简单文件名:文件名必须与 Windows 和 Unix 兼容。这意味着文件名不能包含*:、 或 等字符?。您也可能没有多个同名但大小写不同的文件。
  • 最好不要使用 TypeScript“慢速类型” :为了加快类型检查、支持文档生成和 Node.js 兼容性,JSR 包不应在导出的函数、类或变量中使用某些 TypeScript 类型。这是默认强制执行的,但可以选择退出。
  • 有效的跨文件导入:包中模块之间的所有相对导入必须在发布时解析。支持的说明符的格式取决于 a 是否package.json正在使用,并在下面详细说明。

编写代码

PixPin_2024-03-08_17-38-26.png

创建这种结构的文件,

jsr.json/deno.js:配置文件

mod.ts:具体的实现代码

这俩是固定的写发

我们在mod.ts中写一个数组过滤的功能

//mod.ts
export function filterArray(arr: number[], condition: (item: number) => boolean): number[] {
    return arr.filter(condition);
}

该文件是配置文件

//jsr.json{"name": "@fofo/filter-array","version": "0.1.0","exports": "./mod.ts"}

上面就是 jsr.json 的内容,exports 是入口文件,name 这里分两个部分,scope 和 包名,这里我用了我的用户名 @fofo,scope 类似 npm 的组织,需要在 jsr.io 上创建,目前试用阶段,每个账号最多创建 3个 scope。

PixPin_2024-03-08_17-25-14.png

通过 CLI 发布

deno publish

执行完成之后会弹出该页面 点击 Approve 授权,就发布成功啦。

PixPin_2024-03-08_17-47-33.png

这样就可以在jsr.io/搜到我们刚刚发布的包了

PixPin_2024-03-08_17-49-45.png

PixPin_2024-03-08_17-47-50.png

到此发布的第一个JSR完成了

后面就看大佬们去完善Deno生态了,打倒Npm.