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

NPM子模块内的bash脚本如何访问自身的npm环境变量

NPM子模块被父项目调用时访问自身环境变量的解决方案

问题根因

npm的运行时环境变量是基于执行命令时的工作目录下的package.json注入的,当你从父项目调用子模块的bin脚本时,默认工作目录为父项目根目录,npm只会加载父项目的环境变量,不会自动识别子模块的配置。

方案1:指定npm工作目录,直接获取子模块原生环境变量

修改子模块的bash-script.sh,通过--prefix参数指定npm的工作目录为子模块自身的根目录,就能正常注入子模块的npm环境变量:

#!/bin/bash
# 获取当前脚本所在的子模块根目录
SUBMODULE_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
# 指定工作目录执行子模块的npm脚本
npm run get-package-name --prefix "$SUBMODULE_DIR"

执行后会正常返回npm-submodule,所有npm原生支持的环境变量(如版本、依赖配置等)都可以用这种方式获取。

方案2:直接读取子模块的package.json配置

如果不想依赖npm执行,可以直接读取子模块自身的package.json文件提取配置,分两种实现:

依赖jq工具(推荐,JSON解析更稳定)

#!/bin/bash
SUBMODULE_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
# 提取name字段,替换为你需要的字段名即可
SUBMODULE_NAME=$(jq -r '.name' "$SUBMODULE_DIR/package.json")
echo $SUBMODULE_NAME

用基础bash命令实现(无额外依赖)

#!/bin/bash
SUBMODULE_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
# 正则提取name字段,适配常规的package.json排版
SUBMODULE_NAME=$(grep '"name"' "$SUBMODULE_DIR/package.json" | awk -F '"' '{print $4}')
echo $SUBMODULE_NAME

内容的提问来源于stack exchange,提问作者jv-k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 02:33:05