遠端 MacDeno 流水線時,同時命中 jsr:npm: 兩條解析鏈很常見:一邊走 JSR 的模組中繼,一邊仍要對 npm registry 拉 tarball。跨境場景下,瓶頸多半不是「會不會寫 import」,而是快取根目錄是否固定deno.lock 是否與 CI 對齊,以及共享 runner 上的併發 job 是否把頻寬與檔案鎖打滿。建議先從MacPull 首頁了解節點與網路環境,再搭配技術部落格列表裡的鏡像與拉取系列文交叉驗證;與本文最貼近的延伸為Git/npm/Homebrew 鏡像 CI 優化

場景與痛點

誰該讀:在 Apple Silicon 遠端機或自建 runner 上跑 deno taskdeno cache/測試矩陣的團隊。典型痛點:(1)冷啟同時打 JSR 與 npm,TLS 與小包延遲疊加;(2)多人共用遠端 Mac,DENO_DIR 未隔離致快取競態;(3)CI 平行 job 過多集體逾時;(4)lock 與 CI Deno 小版本不一致,frozen 隨機紅燈。

依賴型態主要風險優先動作
jsr: 為主JSR API 與 tarball 跨境延遲;私有套件需令牌固定 DENO_DIR、必要時 DENO_AUTH_TOKENS、維護 deno.lock
大量 npm:registry 與 tarball 主機分離,代理/鏡像半套最致命統一 NPM_CONFIG_REGISTRY(或 .npmrc)+完整 HTTPS_PROXYNO_PROXY
混用 URL import快取鍵分散、難以審計出站能收斂到 JSR/npm 就收斂;其餘寫入允許清單與 Runbook

決策一句話:可複現優先於「當場提速」——先鎖 deno.lock 與工具鏈版本,再用快取目錄與併發上限交換穩定性;需要貼近目標區域出站與頻寬時,租用位於合適節點的遠端 Mac往往比在本機硬撐代理更省事。

Deno/JSR 拉取路徑對照表

下表用於對照「解析/下載實際打向哪裡」,方便與企業防火牆、鏡像與代理規則對齊(域名僅示意,請以貴司核准清單為準)。

import 寫法典型上游快取落點(相對 DENO_DIR備註
jsr:@scope/pkgjsr.io(meta/redirect/tarball)remote_https_jsr.io 等子樹公開套件無需令牌;私有範圍需 DENO_AUTH_TOKENS
npm:pkg@rangenpm registry(metadata)+ tarball CDNnpm 相關子目錄與 Node 生態共用鏡像策略;設 NPM_CONFIG_REGISTRY 統一入口
https://… 直連依 URL依 URL 雜湊分層審計成本高;CI 建議限網或改為已發佈模組

對照 npm 鏡像文:若流水線同時跑 Node 工具鏈,請一併閱讀站內 依賴拉取穩定性 FAQ,避免 Deno 與 npm CLI 各走各的 registry。

lockfile 與快取目錄可執行參數

lockfile:專案根目錄的 deno.lock 應納入版本庫;CI 依賴步使用 deno cache --frozen(或專案慣用之等同旗標)拒絕隱式升級。快取根:以環境變數 DENO_DIR 指向可掛卷路徑(範例用 macOS 使用者快取子目錄),與互動式登入帳號分離,必要時為每個 job 追加子資料夾避免並寫。

變數/檔案建議值(遠端 Mac/CI)說明
DENO_DIR$HOME/Library/Caches/deno-ci 或掛卷路徑統一快取根;多 job 可設 …/job-$CI_JOB_ID
deno.lockdeno.json 同層提交frozen 步驟與程式碼 review 綁定
NPM_CONFIG_REGISTRY團隊核可的 registry 或鏡像 base只影響 npm: 解析鏈
DENO_AUTH_TOKENSjsr.io=xxxxx(示例格式)私有 JSR scope;勿寫入公開日誌
DENO_NO_PROMPT1CI 非互動;避免卡住等待輸入
# 遠端 Mac 或 CI(bash/zsh)— 可複製骨架
export DENO_DIR="${DENO_DIR:-$HOME/Library/Caches/deno-ci}"
export DENO_NO_PROMPT="${DENO_NO_PROMPT:-1}"
# 跨境/內網鏡像(請替換為實際 URL)
# export NPM_CONFIG_REGISTRY="https://your-npm-mirror.example.com"

deno --version
deno cache --frozen main.ts
# 或:deno task build(請確保 task 內仍走 frozen/鎖檔策略)

CI 併發與逾時閾值

共享遠端 Mac時,「矩陣很大」不等於「全部同時跑」:依賴下載階段對延遲與連線數極敏感,建議在 orchestrator 層(如 GitHub Actions max-parallel、自建隊列的 worker 數)先封頂同機併發,再觀察 iostat 與構建日誌中的同時下載峰值。

參數類型建議閾值(經驗起點)用途
同機平行 job 數12(弱網或小型 mini);單一重型 job 可為 1避免 Deno/Git/Docker 搶同一出站
依賴步 timeout-minutes2545冷啟+大依賴樹;先寬鬆再依 P95 收斂
整體 job 逾時覆蓋「cache+test」總和並留 20% 余量防止後段測試被前段拖死
矩陣拆分「依賴快取」與「測試_shard」分 job失敗重試時不必重拉全部模組

閾值調整順序:先降併發與確認代理/鏡像一致,再拉高逾時;反向操作容易掩蓋結構性配置錯誤。

跨境網路失敗重試 FAQ

JSR 與 npm 在 Deno 裡會不會搶同一個快取目錄?

兩者快取皆落在 DENO_DIR 底下不同子樹;仍建議在 CI 固定同一 DENO_DIR 並以 lockfile 校驗。多 job 並寫同一目錄可能出現競態,必要時為每個 job 使用獨立子路徑或檔案鎖友好的掛卷選項。

deno.lock 在跨境 CI 上常報與實際不符怎麼辦?

先對齊產生 lock 的 Deno 小版本與 CI 映像;再檢查 NPM_CONFIG_REGISTRY/代理是否與開發機不同導致解析差異。最後在與 CI 相同的平台上執行 deno cache 更新 lock,將 diff 納入 code review。

為什麼加了代理仍間歇 TLS 失敗?如何重試?

常見原因是 NO_PROXY 未涵蓋內網鏡像主機名,或企業根憑證未匯入信任鏈。應統一 HTTPS_PROXYNO_PROXY,並以 SSL_CERT_FILE 指向公司 PEM。暫態錯誤可在步驟級做 3~5 次重試,退避 2/4/8 秒,單次等待上限約 60 秒,並保留 deno cache -L debug 日誌片段便於事後對照。

總結:2026 年在遠端 Mac做 Deno/JSR 與 npm: 跨境拉取,請先用場景與痛點對齊風險,再以拉取路徑對照表打通防火牆與鏡像,接著用 DENO_DIRdeno.lockNPM_CONFIG_REGISTRY 落地可複現參數,最後用併發與逾時閾值退避重試 FAQ 扛弱網。若你希望出站路徑與頻寬盡量貼近目標區域、又不必維護本機長連線,可租用 MacPull 遠端 Mac承載依賴快取與 CI 預拉。請瀏覽免登入頁面:首頁購買頁說明中心;更多文章見技術部落格

遠端 Mac × Deno/JSR CI

固定 lockfile 與 DENO_DIR,跨境拉模組更穩

首頁、購買頁、說明中心皆可免登入瀏覽;部落格內還有 npm/Git 鏡像與拉取 FAQ 可延伸閱讀。