疑難排解
使用 JSR 時可能會發生錯誤。本頁面將有助於您瞭解錯誤的含義和修復方法。
發佈錯誤
將套件發佈到 JSR 時可能會發生這些錯誤。
。
若要找出符號連結或硬式連結,請在套件目錄中執行以下指令
# Linux and macOS
find . -type l -o -type h
# Windows
Get-ChildItem -Recurse | Where-Object { $_.Attributes -match "ReparsePoint" }
無效的輸入類型
套件 tar 檔案包含的項目不是一般檔案或目錄。JSR 僅支援套件 tar 檔案中的一般檔案和目錄。你可以從套件 tar 檔案中移除無效的項目來解決這個錯誤,或是從 jsr.json
/ deno.json
中將其排除排除它。
無效的路徑
已發布的套件包含一個檔案或目錄的路徑,而這個路徑是 JSR 不允許的。錯誤訊息會包含無效的路徑,以及它的問題點。
一般而言,JSR 不允許在 Windows 中無效的路徑、網址中造成困擾的路徑,以及同一路徑存在多種大小寫的路徑。
你可以透過將套件中的檔案或目錄路徑變更為 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 編譯成.js
和 .d.ts
檔的 npm tarball 目錄時所保留的
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
發布的套件包含舊版的「import 斷言」語法,JSR 不允許此語法。JSR 只允許新的「import 屬性」語法。
import "./data.json" assert { type: "json" };
不允許。import "./data.json" with { type: "json" };
允許。
你可以透過將 import 斷言更新為 import 屬性,將 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
產生文件。這可能是因為套件包含語法錯誤。
如果你認為這是錯誤,請聯繫 support@jsr.io
。invalidJsrSpecifier
正在發布的套件包含模組,該模組參照的 JSR 限定符無效。JSR 限定符必須符合 jsr:@<範圍>/<名稱>@<版本>/<路徑>
或 jsr:/@<範圍>/<名稱>@<版本>/<路徑>
格式。您可以透過更新模組,使其參照有效的 JSR 限定符來修正此錯誤。
invalidNpmSpecifier
正在發布的套件包含模組,該模組參照的 NPM 限定符無效。NPM 限定符必須符合 npm:<名稱>@<版本>/<路徑>
或 npm:/<名稱>@<版本>/<路徑>
格式。您可以透過更新模組,使其參照有效的 NPM 限定符來修正此錯誤。
actorNotAuthorized
這個套件正在用沒有許可權發布到範圍的存取權杖發布。
如果從 GitHub Actions 發布,且要發布的 GitHub 存放庫未連結到您嘗試發布的套件時,可能會發生這種情況。您可以透過在套件設定中連結 GitHub 存放庫到您嘗試發布的套件,來修正此錯誤。
如果您不是從 GitHub Actions 發布,您可以透過使用有許可權發布到範圍的存取權杖,來修正此錯誤。
actorNotScopeMember
這個套件正在用對應到非範圍成員使用者的存取權杖發布。
如果呼叫動作工作流程的使用者並非範圍的成員,而發布已限制為範圍成員(預設),則在從 GitHub 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