关于在Makefile中加载环境变量,大多数答案都指向这样做:
include .env.dev
export $(shell sed 's/=.*//' .env.dev)
.env.dev
包含我的环境变量的文件在哪里,例如:
FOO=bar
SQL_DATABASE=mydb_dev
但是,我有两个.env
文件,一个用于生产,一个用于开发。似乎不可能将此include
命令放在make
命令或变量内。我理想的情况是Makefile
:
include config/.env.django.dev
export $(shell sed 's/=.*//' config/.env.django.dev)
serve-dev:
- npm run dev
build-prod:
- npm run build
在运行时,make serve-dev
将首先从文件中加载变量.env.dev
,但是在运行时,make build-prod
将首先从文件中加载变量.env.prod
。许多变量具有相同的键但值不同,因此无法将两者一起加载。
什么是这里的好方法?
我看到两个选择:
将变量加载代码放在包装在的配方中$(eval ...)
。
缺点是,如果出于某种原因需要在配方中输入变量,则无法在输入配方之前对其进行访问。
serve-dev:
$(eval include include .env.dev)
$(eval export $(shell sed 's/=.*//' .env.dev))
裹在类似可变加载代码ifneq ($(filter serve-dev,$(MAKECMDGOALS)),)
... endif
。
这将使变量可在任何地方访问,仅在使用命令行标志指定目标时才起作用,而不是将其构建为其他目标的依赖项。
ifneq ($(filter serve-dev,$(MAKECMDGOALS)),)
include config/.env.django.dev
export $(shell sed 's/=.*//' config/.env.django.dev)
endif
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句