能否在package.json的Git子模块脚本中引入.env变量执行分支切换?
问题解答
你的方案不可行,原因有两点:
- npm/yarn 默认不会自动加载外部
.env文件中的环境变量,直接在脚本里引用$ENV会被解析为系统环境变量(未定义则为空值),无法读取到.env里的配置。 - 原脚本里的
git checkout会在主仓库执行,而非目标子模块目录,无法切换子模块的分支。
要实现需求,你需要借助dotenv-cli加载.env文件,同时指定子模块目录执行checkout,具体步骤如下:
- 安装依赖:
npm install dotenv-cli --save-dev
- 修改package.json脚本:
"submodule-install": "dotenv -e .env -- git submodule add ../my-utils.git modules/my-utils --force && dotenv -e .env -- git -C modules/my-utils checkout $ENV", "submodule-update": "dotenv -e .env -- git submodule update --init --force --recursive --remote && dotenv -e .env -- git -C modules/my-utils checkout $ENV"
如果使用yarn,可通过临时调用避免本地安装依赖:
"submodule-install": "yarn dlx dotenv-cli -e .env -- git submodule add ../my-utils.git modules/my-utils --force && yarn dlx dotenv-cli -e .env -- git -C modules/my-utils checkout $ENV", "submodule-update": "yarn dlx dotenv-cli -e .env -- git submodule update --init --force --recursive --remote && yarn dlx dotenv-cli -e .env -- git -C modules/my-utils checkout $ENV"
内容的提问来源于stack exchange,提问作者pmiranda
相关产品推荐
相关产品推荐

