使用包
您可以在任何支持 ES 模块的运行时中使用 JSR 包,例如 Deno、Node.js、Bun、Cloudflare Workers 等。您还可以将 JSR 包与支持 ES 模块的捆绑器一起使用,例如 **Vite**、**esbuild**、**Webpack** 和 **Rollup**。
添加包
您可以使用以下任何命令将 JSR 包添加到您的项目中 - 以下示例将向您的项目添加最新版本的 @luca/cases
。
# deno
deno add @luca/cases
# npm (one of the below, depending on your package manager)
npx jsr add @luca/cases
yarn dlx jsr add @luca/cases
pnpm dlx jsr add @luca/cases
bunx jsr add @luca/cases
如果您使用的是 Deno,deno add
命令将在 deno.json
文件中为您指定的 JSR 模块添加一个 导入映射 条目。该条目将类似于以下内容
{
"imports": {
"@luca/cases": "jsr:@luca/cases@^1.0.1"
}
}
对于 npm 和与 npm 兼容的包管理器,jsr
命令会将依赖项添加到您的 package.json
文件中,以及一个 .npmrc
文件到您的项目根目录,其中包含使用 JSR 与 npm 的必要配置。了解有关 JSR 的 npm 兼容性层 的更多信息。
使用 npx jsr add
安装后,您的 package.json 将包含一个类似于以下内容的依赖项条目
{
"dependencies": {
"@luca/cases": "npm:@jsr/luca__cases@^1.0.1"
}
}
此 npm 依赖项配置使用了一个特殊的自定义范围,称为 @jsr
,该范围现在已在 .npmrc
中为您配置。
@jsr:registry=https://npm.jsr.io
注意:您应该将新的
.npmrc
文件检入源代码控制 - 它将需要安装 JSR 模块的更新。
添加包后,您可以在跨运行时的 ES 模块代码中以相同的方式使用它
import { camelCase } from "@luca/cases";
camelCase("hello world"); // "helloWorld"
jsr:
说明符导入
使用 在 Deno 中,您可以使用包而无需安装步骤,方法是在源文件中直接使用 jsr:
说明符。在此示例中,我们直接在代码中导入 @luca/cases
模块,而无需导入映射条目。
import { camelCase } from "jsr:@luca/cases@^1.0.1";
camelCase("hello world"); // "helloWorld"
这里,jsr:
说明符后跟包范围、包名称、semver 约束,以及可选的入口点。
语义版本控制解析
JSR 使用语义版本控制来解析包版本。这意味着您可以在 jsr:
指定符、导入映射或 package.json
的 "dependencies"
条目中使用语义版本范围,然后运行时或包管理器将下载满足包所有约束的最新版本。
如果您只关心主版本,您可以只指定主版本
# deno
deno add @luca/cases@1
# npm (and npm-like systems)
npx jsr add @luca/cases@1
如果您想使用特定的次版本,您可以指定次版本
# deno
deno add @luca/[email protected]
# npm (and npm-like systems)
npx jsr add @luca/[email protected]
如果您想使用特定的补丁版本,您可以指定补丁版本
# deno
deno add @luca/[email protected]
# npm (and npm-like systems)
npx jsr add @luca/[email protected]
如果您想使用至少特定的补丁版本,但希望允许
更新,您可以使用 ^
前缀指定补丁版本
# deno
deno add @luca/cases@^1.0.1
# npm (and npm-like systems)
npx jsr add @luca/cases@^1.0.1
了解更多关于语义版本控制的信息,请点击 这里.
入口点
JSR 上的每个包都有一个或多个入口点。入口点是包用户可以导入的模块。入口点在包配置文件的 exports
字段中指定。 了解更多关于 exports
的信息。
如果您在导入中没有指定入口点,运行时将使用包的默认入口点。例如,当您导入 jsr:@luca/cases@1
时,您将导入 @luca/cases
包的默认入口点。
您也可以从包中导入其他入口点。为此,请在版本约束之后指定入口点
import { join } from "jsr:@std/path@1/join";
如果您使用的是导入映射或 package.json
,您可以在别名之后指定入口点
import { join } from "@std/path/join";
未在 exports
字段中列出的文件不能被包用户直接导入。但是,它们可以被包中的其他模块导入。
包不需要有默认入口点。如果包没有默认入口点,那么您必须在导入中指定一个入口点。