You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器执行melos bootstrap触发空检查运算符错误求助

Docker容器中执行melos bootstrap触发Null检查运算符错误(本地运行正常)

问题背景

我通过Dockerfile容器化Dart应用,项目包含三个同级子包,使用melos工具实现批量构建。本地运行melos bootstrap完全正常,但在容器内执行时触发空检查运算符错误,错误栈指向pubspec的解析逻辑,而非业务代码。

项目结构

-- packages
---- package1
---- package2
---- package3

错误栈信息

# melos bs
Unhandled exception:
Null check operator used on a null value
#0      new JsonParser (package:pubspec/src/json_utils.dart:87:48)
#1      parseJson (package:pubspec/src/json_utils.dart:13:5)
#2      new PubSpec.fromJson (package:pubspec/src/pubspec.dart:96:15)
#3      PubSpec.loadFile (package:pubspec/src/pubspec.dart:128:15)
<asynchronous suspension>
#4      PackageMap.resolvePackages.<anonymous closure> (package:melos/src/package.dart:542:25)
<asynchronous suspension>
#5      Future.wait.<anonymous closure> (dart:async/future.dart:522:21)
<asynchronous suspension>
#6      PackageMap.resolvePackages (package:melos/src/package.dart:539:5)
<asynchronous suspension>
#7      MelosWorkspace.fromConfig (package:melos/src/workspace.dart:65:25)
<asynchronous suspension>
#8      _Melos.createWorkspace (package:melos/src/commands/runner.dart:100:13)
<asynchronous suspension>
#9      _BootstrapMixin.bootstrap (package:melos/src/commands/bootstrap.dart:5:23)
<asynchronous suspension>
#10     CommandRunner.runCommand (package:args/command_runner.dart:212:13)
<asynchronous suspension>
#11     MelosCommandRunner.runCommand (package:melos/src/command_runner.dart:80:5)
<asynchronous suspension>
#12     main (file:///root/.pub-cache/hosted/pub.dev/melos-2.9.0/bin/melos.dart:46:5)
<asynchronous suspension>

配置文件

melos.yaml

packages:
  - packages/**

scripts:
  analyze:
    exec: dart analyze .
  get:
    exec: dart pub get

Dockerfile

### main application image ###
FROM dart:stable

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y cmake build-essential gperf libssl-dev zlib1g-dev \
    && rm -rf /var/lib/apt/lists/*

# Install packages
RUN apt update \
    && apt install -y \
    libc++-dev \
    && rm -rf /var/lib/apt/lists/*


RUN rm -rf /app && mkdir -p /app
COPY . /app

ENV PATH="/root/.pub-cache/bin:${PATH}"

WORKDIR /app

RUN rm -rf packages/td_json_client/build && \
 mkdir packages/td_json_client/build && \
 cd packages/td_json_client/build && \
 cmake -DCMAKE_INSTALL_PREFIX:PATH=/app/packages/td_json_client/lib/src/blobs/darwin/arm64 /app/packages/td_json_client/lib/src/log_callback && \
 cmake --build . --target install


RUN ls /app/packages/td_json_client/build
RUN ls /app/packages/td_json_client/lib/src/blobs/darwin/arm64


RUN cp -r /app/packages/td_json_client/lib/src/blobs/darwin/arm64 /usr/local/lib/

RUN dart pub global activate melos
# I commented out the code below so I could sh into the docker image
# RUN melos bootstrap 
# RUN melos run get
# CMD ["/app/packages/cli/bin/main.dart","login","-h","--api-id=","$API_ID", \
#     "--api-hash=","$API_HASH","--phone-number=","$PHONE", \
#     "--libtdjson-path=","$PATH_TD_JSON_LIB","--libtdjson-loglevel=","$LOG_LEVEL"]

已尝试操作

  • 使用--scope指定单个子包执行命令(如melos bootstrap --scope package/package1),仍触发相同错误。

预期结果

希望容器内执行结果与本地一致:

Running "dart pub get" in workspace packages...
  ✓ <packagename1>
    └> packages/<packagename1>
  ✓ <packagename2>
    └> packages/<packagename2>
  ✓ <packagename3>
    └> packages/<packagename3>

Linking workspace packages...
  > SUCCESS

Generating IntelliJ IDE files...
  > SUCCESS

解决方案建议

  • 检查文件复制完整性:在容器内执行ls -la packages/,确认所有子包的pubspec.yaml都已正确复制,排查是否因.dockerignore忽略必要文件或COPY命令遗漏文件。
  • 修复文件权限:执行chmod -R 644 packages/,确保容器内的pubspec.yaml文件具备可读权限,避免melos无法读取解析。
  • 升级melos版本:当前使用的melos 2.9.0可能存在兼容性问题,尝试切换到稳定版本,如dart pub global activate melos 3.0.0(或最新稳定版)。
  • 校验路径大小写:容器使用Linux环境,路径区分大小写,确认本地路径命名(如package/package1 vs packages/package1)在容器内完全一致,避免路径匹配错误导致找不到pubspec文件。
  • 提前解析依赖:在执行melos bootstrap前,先在每个子包执行dart pub get,或在根目录执行dart pub get,确保依赖提前完成解析。
  • 清理缓存:容器内执行dart pub cache clean,重新激活melos后再执行bootstrap。

内容的提问来源于stack exchange,提问作者Guilherme Vieira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:25:49