故障排查
在下面找到日志中的消息。将 DEBUG 设为任意非空值,可以在日志中记录发往 BundleWatch 服务的失败请求的详细信息。
配置
| 消息 | 含义和处理方法 |
|---|---|
[ERROR] Configuration missing | 选定的配置中没有要检查的文件。没有命令行 glob 或 --config 时,BundleWatch 向上搜索 bundlewatch.config.*,包含最近的 package.json 所在目录,然后回退到其中的 bundlewatch 键。请在该配置中添加 files,或通过 --config 选择文件。参见配置查找。以退出码 1 退出。 |
[FATAL] config.files must be an Array 或 [FATAL] config.files must only contain objects with a path, e.g. { path: "./dist/*.js" } | files 的格式不对;参见 files。以退出码 1 退出。 |
[FATAL] config.compression must be a valid type | defaultCompression 或 --compression 不是 gzip、brotli 或 none,或者 --compression 没有值。以退出码 1 退出。 |
[FATAL] config.ci.trackBranches must be an Array | 请写成列表,例如 ["main"]。以退出码 1 退出。 |
[FATAL] config.normalizeFilenames (…) is not a valid RegExp. | 该字符串不是有效的正则表达式,或者 --normalize 没有值。在 JSON 中,每个反斜杠都要写两次。以退出码 1 退出。 |
[FATAL] Could not find JSON config file: …、[FATAL] Could not parse JSON config file: …、[FATAL] Exception while loading JS config: … 或 [FATAL] Could not parse …/package.json | 无法读取或加载该文件。在它上方,日志会显示错误信息,以及 [ERROR] Exception while parsing package.json、[ERROR] Exception while loading JS config、[ERROR] Exception while trying to read JSON config file 或 [ERROR] Exception while parsing JSON config 之一。--config 路径相对于当前目录。以退出码 1 退出。 |
[FATAL] --config needs the path of a config file | --config 没有值,或者下一个参数以 - 开头。以退出码 1 退出。 |
[ERROR] unknown option '…' | 对照 选项 检查拼写。以退出码 1 退出。 |
[WARNING] CLI files supplied, config in package.json will be ignored 以及其他 … will be ignored 警告 | 存在多个配置来源;参见 配置来源。运行会使用第一个来源继续。 |
文件
| 消息 | 含义和处理方法 |
|---|---|
[ERROR] There is no matching file for ./dist/*.js | 该路径没有匹配到任何文件,这会导致运行失败。请检查构建是否已先运行,以及路径是否相对于你运行 BundleWatch 的目录。 |
[ERROR] Could not read file <path> | glob 匹配到了目录,或 BundleWatch 无法读取的文件。这会导致运行失败。请只匹配文件,例如用 ./dist/**/*.js 代替 ./dist/*。 |
[INFO] Some files could not be measured, no results saved | 由于上面的文件错误,这次构建不会保存基准,运行也会失败。请修复这些错误。 |
PASS <path>: <path>: File removed (… smaller than <base branch>) (gzip) | 该文件在基准中,但不在这次构建中。它不会让检查失败,并会在某次跟踪分支的构建保存了不含它的基准后消失。如果你并没有删除这个文件,请检查 glob 是否仍以相同方式写出它的路径,以及 normalizeFilenames 是否仍给它相同的名称:参见 文件如何匹配。 |
< Infinity,例如 PASS ./dist/app.js: 30.71KB < Infinity (gzip) | 该文件没有 maxSize,因此不会失败;参见 files。 |
基准与对比
| 消息 | 含义和处理方法 |
|---|---|
[WARNING] Some CI configuration options were not found (…) | BundleWatch 缺少列出的值,因此只检查 maxSize。在你自己的机器上运行时,这是正常的。在 CI 中,请设置日志中列出的 token 或变量。 |
[WARNING] bundlewatchServiceHost was not supplied, bundlewatch comparisons unavailable | 设置 bundlewatchServiceHost: null 时属于正常现象。运行会继续,但不做对比。 |
[WARNING] The ci.repoBranchBase was not supplied, bundlewatch comparisons unavailable | 你的配置将 ci.repoBranchBase 设成了空值,例如 '' 或 null,这会覆盖检测到的基准分支和 CI_BRANCH_BASE。请删除它,或将它设为某个分支名。运行会继续,但不做对比。 |
[WARNING] The ci.repoCurrentBranch was not supplied, bundlewatch results will not be saved | BundleWatch 不知道正在构建哪个分支,因此这次运行会与基准对比,但不会保存基准。请设置 CI_BRANCH,并删除配置中所有空的 ci.repoCurrentBranch 值:它会覆盖 CI_BRANCH。 |
[ERROR] Unable to fetch fileDetails for baseBranch=… code=404 | 运行会继续,但不做对比。基准分支还没有保存过基准,例如第一次运行时。在基准分支的某次构建保存了基准之后,该错误就会消失。如果没有消失,请检查基准分支是否正确(参见 基准分支与跟踪分支),以及它是否为跟踪分支。 |
同一消息,code=401 | 服务拒绝了用于这个仓库的 token,或者缺少提交 SHA。在 GitHub Enterprise 上,请参阅 GitHub Enterprise。运行会继续,但不做对比。 |
同一消息,code=503 | 服务无法连接 GitHub 来检查 token。运行会继续,但不做对比;请重新运行任务。 |
同一消息,code=ECONNABORTED | 服务在 10 秒内没有响应。ENOTFOUND 或 ECONNREFUSED 等连接错误表示 BundleWatch 无法连接到服务,例如位于代理之后时(参见 使用代理时)。运行会继续,但不做对比。 |
任意 Unable to … 消息中的 code=ERR_INVALID_URL | bundlewatchServiceHost 不是完整的 URL,例如缺少 https://。参见 bundlewatchServiceHost。运行会继续,但不使用服务。 |
[INFO] <branch> is not a branch to track, no results saved | 在非跟踪分支上属于正常现象:运行会继续,但不保存基准。要保存某个分支的结果,请将它加入 ci.trackBranches。 |
[INFO] Pull request build, no results saved | 正常现象:运行会继续,但不保存基准。参见 Pull Request 构建。 |
[ERROR] Unable to save fileDetails for currentBranch=… code=… | 基准没有保存,运行会继续。401:服务拒绝了 token;在 GitHub Actions 上请使用工作流的 GITHUB_TOKEN,在其他地方请使用拥有推送权限的用户的 token(参见 服务的变化)。413:基准的 JSON 超过 350 KB;503 和网络错误码:同上。 |
[WARNING] Unable to create a short results link code=… | 服务出错,或在 5 秒内没有响应,因此运行会继续,并改为输出长结果链接。如果服务拒绝该请求(1.0 之前的服务就是如此),你会得到长链接,但不会有这条警告。 |
GitHub 状态
| 消息 | 含义和处理方法 |
|---|---|
来自 fork 的 Pull Request 上的 [ERROR] GitHubService HTTP_403 :: … | 它们的 token 无法发布状态。运行会继续;参见 来自 fork 的 Pull Request。 |
其他 [ERROR] GitHubService HTTP_<code> :: <message> | GitHub 拒绝了该状态,消息来自 GitHub。运行会继续。在 GitHub Actions 上,请检查工作流是否授予了 statuses: write。 |
[WARNING] Max reported statuses reached, github status will not be reported | 超过四个文件未通过。运行会继续;参见 GitHub 状态。 |
在 Error: ECONNABORTED、ENOTFOUND、ECONNREFUSED 或类似错误码之后出现 [FATAL] Uncaught exception | BundleWatch 无法发布 GitHub 状态:GitHub 在 5 秒内没有响应(ECONNABORTED),或者连接失败。只要 token、仓库和提交都已知,BundleWatch 就会发布状态,因此运行会以退出码 1 失败。使用代理时,请参阅 使用代理时。 |
使用代理时
BundleWatch 不读取 HTTPS_PROXY 等代理变量。位于代理之后时,请允许直接连接到 api.github.com(或你的 GITHUB_API_URL)和 BundleWatch 服务,或者取消设置 token,只运行体积检查。
创建 token
| 消息 | 含义和处理方法 |
|---|---|
That authorization expired | 没有创建 token:授权超过了 10 分钟,或者是在另一个浏览器中开始的。请在 /setup-github 重新开始,并在启用 cookie 的情况下,于 10 分钟内在同一个浏览器中完成授权。 |
GitHub didn’t issue a token | GitHub 没有用这次授权换发 token,页面上会显示 GitHub 给出的原因。请在 /setup-github 重新开始。 |