故障排除
使用 JSR 时,您可能会遇到错误。此页面将帮助您了解错误的含义以及如何修复它。
发布错误
在将包发布到 JSR 时,可能会出现这些错误。
linkInTarball
正在发布的包包含符号链接或硬链接。JSR 不支持包中的符号链接或硬链接。您可以通过从包中删除符号链接或硬链接,或通过在您的 jsr.json
/ deno.json
中将其排除来修复此错误。
要查找符号链接或硬链接,请在您的包目录中运行以下命令
# Linux and macOS
find . -type l -o -type h
# Windows
Get-ChildItem -Recurse | Where-Object { $_.Attributes -match "ReparsePoint" }
invalidEntryType
包 tarball 包含一个不是普通文件或目录的条目。JSR 仅支持包 tarball 中的普通文件和目录。您可以通过从包 tarball 中删除无效条目或在您的 jsr.json
/ deno.json
中将其排除来修复此错误。
invalidPath
已发布的包包含 JSR 不允许的路径的文件或目录。错误消息包含无效路径以及错误所在。
一般来说,JSR 不允许使用在 Windows 上无效的路径、在 URL 中存在问题的路径以及存在相同路径的不同大小写形式的路径。
您可以通过更改包中文件或目录的路径为 JSR 允许的路径、从包中删除文件或目录,或在您的 jsr.json
/ deno.json
中将其排除来修复此错误。
路径规则如下
- 小于 155 个字符
- 路径的最后一个组件(文件名)必须小于 95 个字符
- 路径不能以斜杠结尾
- 不能包含双斜杠 (
//
) - 不能包含
.
或..
路径段 - 没有路径段是 Windows 保留名称,例如
CON
或PRN
- 没有路径段以点 (
.
) 结尾 - 不包含 Windows 路径分隔符 (
\
或:
) - 不包含无效的 Windows 路径字符 (
<
,>
,"
,|
,?
,*
) - 不包含空格 (
\s
,\t
,\n
,\r
) - 不包含在 URL 中具有特殊含义的字符 (
%
或#
) - 不包含其他字符,这些字符不是
a-z
,A-Z
,0-9
,$
,(
,)
,+
,-
,.
,@
,[
,]
,_
,{
,}
或~
中的任何一个 - 不以
/_dist/
开头,因为这是 JSR 在构建 npm tarball 时将.js
和.d.ts
文件发射到的目录的保留名称
invalidExternalImport
正在发布的包包含 JSR 不允许的外部导入。JSR 仅允许 jsr:
、npm:
、data:
或 node:
指定符的外部导入。
您可以通过从包中删除外部导入或将其替换为来自受支持源的外部导入来修复此错误。
globalTypeAugmentation
正在发布的包包含全局类型增强。 这是不允许的,因为它引入了“慢速类型”。 了解更多关于“慢速类型”的信息.
您可以通过从源代码中删除全局类型增强来修复此错误。
commonJs
正在发布的包包含 CommonJS 代码,例如 require()
。 这是不允许的,因为 JSR 仅限 ESM。
您可以通过从源代码中删除 CommonJS 代码来修复此错误。
bannedTripleSlashDirectives
正在发布的包包含 JSR 不允许的三斜杠指令。 JSR 仅允许 /// <reference types="..." />
指令。
/// <reference lib="..." />
指令和 /// <reference no-default-lib="true" />
不允许。
您可以通过从源代码中删除三斜杠指令来修复此错误。
bannedImportAssertion
正在发布的包包含旧的“导入断言”语法,JSR 不允许。 JSR 仅允许新的“导入属性”语法。
import "./data.json" assert { type: "json" };
不允许。 import "./data.json" with { type: "json" };
允许。
您可以通过将导入断言更新为导入属性来修复此错误,方法是将assert
替换为with
。
fileTooLarge
正在发布的包包含一个文件,该文件太大。JSR 仅允许大小小于 4MB 的文件。您可以通过从包中删除文件或在配置文件中将其排除来修复此错误。
packageTooLarge
正在发布的包太大。JSR 仅允许大小小于 20MB 的包。您可以通过从包中删除大型文件或在配置文件中将其排除来修复此错误。
如果您无法排除足够的文件以使您的包低于限制,请联系支持以请求提高限制.
caseInsensitiveDuplicatePath
正在发布的包包含一个文件或目录,其路径与包中另一个文件或目录的路径相同,但大小写不同。JSR 不允许这样做,因为它会导致 Windows 上 NTFS 等不区分大小写的文件系统出现问题。
您可以通过从包中删除其中一个文件或目录、重命名包中的其中一个文件或目录,或在配置文件中排除其中一个文件或目录来解决此错误。
missingConfigFile
正在发布的包不包含配置文件。JSR 要求所有包都包含配置文件以读取元数据(如 exports
)。
您可以通过向包中添加配置文件来解决此错误。
invalidConfigFile
正在发布的包包含一个配置文件,该配置文件不是有效的 JSON(C)(存在语法错误)。
您可以通过将配置文件修复为有效的 JSON(C) 来解决此错误。
configFileNameMismatch
正在发布的包包含一个配置文件,该配置文件的name
字段与正在发布的包的名称不匹配。JSR 要求配置文件的name
字段与正在发布的包的名称匹配。
您可以通过将配置文件的name
字段更改为与正在发布的包的名称匹配来解决此错误。
configFileVersionMismatch
正在发布的包包含一个配置文件,该配置文件的version
字段与正在发布的包的版本不匹配。JSR 要求配置文件的version
字段与正在发布的包的版本匹配。
您可以通过将配置文件的version
字段更改为与正在发布的包的版本匹配来解决此错误。
configFileExportsInvalid
正在发布的包包含一个配置文件,该配置文件要么缺少exports
字段,要么exports
字段无效。 了解有关 exports 的更多信息.
您可以通过将配置文件的exports
字段更新为两种有效形式之一来解决此错误
{
"exports": "./mod.ts"
}
{
"exports": {
".": "./mod.ts",
"./greet": "./greet.ts"
}
}
graphError
正在发布的包引用了一个不存在的模块,或者存在语法错误。JSR 要求从入口点引用的所有模块都必须有效。
您可以通过修复有错误的模块来解决此错误。
docError
正在发布的包无法使用 deno doc
生成文档。这可能是因为包包含语法错误。
如果您认为这是个错误,请联系支持团队:[email protected].
invalidJsrSpecifier
正在发布的包包含一个模块,该模块引用了一个无效的 JSR 指定符。JSR 指定符必须采用 jsr:@<scope>/<name>@<version>/<path>
或 jsr:/@<scope>/<name>@<version>/<path>
的形式。您可以通过更新模块以引用有效的 JSR 指定符来解决此错误。
invalidNpmSpecifier
正在发布的包包含一个模块,该模块引用了一个无效的 npm 指定符。npm 指定符必须采用 npm:<name>@<version>/<path>
或 npm:/<name>@<version>/<path>
的形式。您可以通过更新模块以引用有效的 npm 指定符来解决此错误。
actorNotAuthorized
该软件包正在使用没有发布到该范围的权限的访问令牌进行发布。
如果从 GitHub Actions 发布,而发布的 GitHub 存储库未链接到您尝试发布的软件包,则可能会发生这种情况。您可以通过在软件包设置中将 GitHub 存储库链接到您尝试发布的软件包来修复此错误。
如果您不是从 GitHub Actions 发布,则可以使用具有发布到该范围的权限的访问令牌来修复此错误。
actorNotScopeMember
该软件包正在使用与不是该范围成员的用户相对应的访问令牌进行发布。
如果从 GitHub Actions 发布,而调用 Actions 工作流的用户不是该范围的成员,则可能会发生这种情况,如果发布限制为范围成员(默认)。您可以通过将用户添加到该范围,或通过更改该范围上的 GitHub Actions 安全设置以不再要求发布用户是该范围的成员来修复此问题。
如果您不是从 GitHub Actions 发布,则可以使用作为该范围成员的用户进行身份验证,或将用户添加到该范围,并至少具有“成员”角色来修复此错误。
排除模块错误
在过滤文件后,您可能会遇到一个excluded-module
错误,提示软件包模块图中的一个模块被排除在发布之外。
当您意外排除发布代码中使用的模块时,可能会发生这种情况(例如,编写"exclude": ["**/*.ts"]
,然后尝试发布包含mod.ts
导出的软件包)。在这种情况下,JSR 会阻止您意外发布无法正常工作的软件包。
要解决此问题,请确保错误消息中提到的模块未在配置文件的exclude
和/或publish.exclude
中排除,或者不要在您的包导出使用的任何代码中引用它。
您可以在您的包目录中运行以下命令,找到所有包含在包中的文件
npx jsr publish --dry-run
# or
deno publish --dry-run