From 2660d156f0a79d476c193f5ab6018b5017926392 Mon Sep 17 00:00:00 2001 From: engigu Date: Mon, 23 Mar 2026 21:20:35 +0800 Subject: [PATCH] chore: docker add mise hook --- docker/Dockerfile | 3 +++ docker/Dockerfile.dev | 3 +++ docker/Dockerfile.minimal | 3 +++ docker/mise-hook.sh | 29 +++++++++++++++++++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 docker/mise-hook.sh diff --git a/docker/Dockerfile b/docker/Dockerfile index e84232c..028aa3d 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -147,7 +147,10 @@ COPY docker/docker-entrypoint.sh . # Copy agent binaries to /opt/agent COPY --from=agent-builder /opt/agent /opt/agent +COPY docker/mise-hook.sh /etc/profile.d/mise-hook.sh + RUN chmod +x docker-entrypoint.sh \ + && cat /etc/profile.d/mise-hook.sh >> /etc/bash.bashrc \ && echo "set encoding=utf-8" >> /etc/vim/vimrc \ && ln -sf /app/baihu /usr/local/bin/baihu diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev index 35a44a4..a5164f5 100644 --- a/docker/Dockerfile.dev +++ b/docker/Dockerfile.dev @@ -20,6 +20,9 @@ RUN sed -i 's@deb.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.li && apt-get install -y --no-install-recommends $BUILD_DEPS \ && rm -rf /var/lib/apt/lists/* +COPY docker/mise-hook.sh /etc/profile.d/mise-hook.sh +RUN cat /etc/profile.d/mise-hook.sh >> /etc/bash.bashrc + RUN go env -w GOPROXY=https://goproxy.cn,direct ENV MISE_GLOBAL_DIR=/opt/mise-dev diff --git a/docker/Dockerfile.minimal b/docker/Dockerfile.minimal index a21aa55..54c3cf5 100644 --- a/docker/Dockerfile.minimal +++ b/docker/Dockerfile.minimal @@ -131,7 +131,10 @@ COPY docker/docker-entrypoint.minimal.sh ./docker-entrypoint.sh # Copy agent binaries COPY --from=agent-builder /opt/agent /opt/agent +COPY docker/mise-hook.sh /etc/profile.d/mise-hook.sh + RUN chmod +x docker-entrypoint.sh \ + && cat /etc/profile.d/mise-hook.sh >> /etc/bash.bashrc \ && echo "set encoding=utf-8" >> /etc/vim/vimrc \ && ln -sf /app/baihu /usr/local/bin/baihu diff --git a/docker/mise-hook.sh b/docker/mise-hook.sh new file mode 100644 index 0000000..37969ef --- /dev/null +++ b/docker/mise-hook.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# 面向终端的交互式 Hook 拦截器 +# 目的是为了在终端手动执行 `mise exec node -- node xxx` 时也能具有与 Go 系统底层相同的 NODE_PATH 环境 +mise() { + if [[ "$1" == "exec" || "$1" == "x" ]]; then + local is_node=false + for arg in "$@"; do + if [[ "$arg" == *"node"* ]]; then + is_node=true + break + fi + done + + if [[ "$is_node" == true ]]; then + local node_bin=$(command mise which node 2>/dev/null) + if [[ -n "$node_bin" && "$node_bin" == *"/bin/node" ]]; then + # 截取路径并附加到当前进程执行环境的前置变量 + NODE_PATH="${node_bin%/bin/node}/lib/node_modules" command mise "$@" + return $? + fi + fi + fi + # 非 Node 场景或拦截失败,正常向下执行 + command mise "$@" +} + +# 导出此函数,供所有子环境继承使用 +export -f mise