perry 跨平台编译二进制
perry 跨平台编译如果本机编译很是麻烦,特别是mac电脑,下面分享从零开始构建一个包含 Perry 编译器的 Linux 环境。
整体步骤:
#1.先perry 打基础镜像 docker build --platform linux/amd64 -f perry_base.Dockerfile -t perry-builder:latest . #2.构建项目 docker build --platform linux/amd64 -t my-perry-app . 从 Docker 镜像中复制出来 # 创建一个临时容器(不运行) docker create --name temp my-perry-app # 从容器中复制二进制文件到本地 docker cp temp:/app/main ./my-app-linux-amd64 # 删除临时容器 docker rm temp # 验证文件类型 file ./my-app-linux-amd64 # 查看文件类型 file ./my-app-linux-amd64
perry_base.Dockerfile
创建文件 Dockerfile: perry 目录非项目目录
# perry_base.Dockerfile - 完整版(包含标准库)
FROM --platform=linux/amd64 node:22
# 安装构建工具和 Rust
RUN apt-get update && apt-get install -y \
curl \
build-essential \
pkg-config \
git \
cmake \
&& rm -rf /var/lib/apt/lists/*
# 安装 Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"
# 安装 Perry
RUN npm install -g @perryts/perry
# 添加 Linux 目标
RUN rustup target add x86_64-unknown-linux-gnu
# 复制本地 Perry 源码
COPY ./perry /tmp/perry
# 构建完整的 runtime 和标准库
WORKDIR /tmp/perry
RUN cargo build --release -p perry-runtime --target x86_64-unknown-linux-gnu
RUN cargo build --release -p perry-stdlib --target x86_64-unknown-linux-gnu
# 设置环境变量
ENV PERRY_RUNTIME_DIR=/tmp/perry/target/x86_64-unknown-linux-gnu/release
# 验证所有库文件都存在
RUN perry --version && \
ls -la $PERRY_RUNTIME_DIR/libperry_*.a && \
echo "Runtime 和 Stdlib 都已构建"
WORKDIR /app
项目Docker
FROM perry-builder:latest AS builder ENV PERRY_RUNTIME_DIR=/tmp/perry/target/x86_64-unknown-linux-gnu/release COPY . . RUN perry compile src/main.ts --target linux # 运行镜像 FROM --platform=linux/amd64 alpine:latest RUN apk add --no-cache libgcc libstdc++ WORKDIR /app # 修正:直接从 /app 复制 main 文件,而不是 /app/build COPY --from=builder /app/main ./ EXPOSE 3000 CMD ["./main"]
部署与运行
# 上传到服务器 scp ./my-app-linux-amd64 user@your-server:/opt/myapp/ # 在服务器上运行 ssh user@your-server cd /opt/myapp chmod +x my-app-linux-amd64 ./my-app-linux-amd64

