eggjs / egg

🥚 Born to build better enterprise frameworks and apps with Node.js & Koa

Home Page:https://eggjs.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

如何配置本地开发环境可以支持有多个不同config.devXXX.js

fionsay opened this issue · comments

在此输入你需要反馈的 Bug 具体信息(Bug in Detail):

背景:本地开发由于有多套不同的配置,不想每次来回切换修改,例如:
config.dev.js
config.devForOne.js
config.devForTwo.js

如何配置scripts,可以实现类似于 npm run dev(egg-bin dev)的命令操作进行本地开发测试
如执行npm run devForOne,本地开发环境会自动将config.devForOne.js的内容覆盖config.dev.js

可复现问题的仓库地址(Reproduction Repo)

如何配置scripts,可以实现类似于 npm run dev(egg-bin dev)的命令操作进行本地开发测试
如执行npm run devForOne,本地开发环境会自动将config.devForOne.js的内容覆盖config.dev.js

Node 版本号:

16.0.0

Eggjs 版本号:

3.17.5

相关插件名称与版本号(PlugIn and Name):

操作平台与版本号(Platform and Version):

win10

Egg不支持覆盖config.dev.js,默认只会覆盖config.default.js的配置。不过可以配置生效的是config.devForOne.js配置,把 process.env.EGG_SERVER_ENV 环境变量配置成 devForOne 就可以生效 config.devForOne.js 配置,试试添加下 "devForOne": "EGG_SERVER_ENV=devForOne egg-bin dev"

Egg不支持覆盖config.dev.js,默认只会覆盖config.default.js的配置。不过可以配置生效的是config.devForOne.js配置,把 process.env.EGG_SERVER_ENV 环境变量配置成 devForOne 就可以生效 config.devForOne.js 配置,试试添加下 "devForOne": "EGG_SERVER_ENV=devForOne egg-bin dev"

我试过添加,执行之后之后一直乱码报错,具体如下:
$ npm run devForOne

testProject@1.0.0 devForOne
EGG_SERVER_ENV=devForOne egg-bin dev

'EGG_SERVER_ENV' ▒▒▒▒▒ڲ▒▒▒▒ⲿ▒▒▒Ҳ▒▒▒ǿ▒▒▒▒еij▒▒▒
▒▒▒▒▒▒▒▒▒ļ▒▒▒

查了下 egg-bin 的执行参数好像也没有支持修改env的,感觉需要本地开发不同配置的话,只能添加config.local.js去覆盖default的内容

我试了上面这个配置是可以的

看源码可以知道只要设置 EGG_SERVER_ENV 环境变量为 devForOne 没问题就能正常用 config.devForOne 去覆盖掉 config.default 的。这里会拿 config.${this.serverEnv} 配置文件去覆盖config.default,而此时的 this.serverEnv 是从 EGG_SERVER_ENV 环境变量中读取(因为此时 this.options.env 没值且 config/env 目录下都没文件,所以 serverEnv 会走到从 EGG_SERVER_ENV 读取的逻辑)

看源码可以知道只要设置 EGG_SERVER_ENV 环境变量为 devForOne 没问题就能正常用 config.devForOne 去覆盖掉 config.default 的。这里会拿 config.${this.serverEnv} 配置文件去覆盖config.default,而此时的 this.serverEnv 是从 EGG_SERVER_ENV 环境变量中读取(因为此时 this.options.env 没值且 config/env 目录下都没文件,所以 serverEnv 会走到从 EGG_SERVER_ENV 读取的逻辑)

刚刚解决了乱码显示,知道执行失败的原因了:
$ npm run devForOne

testProject@1.0.0 devForOne
EGG_SERVER_ENV=devForOne egg-bin dev

'EGG_SERVER_ENV' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

目前在找为啥报这个错T_T

有个 scope 的配置

我试了上面这个配置是可以的

感谢,ok了,因为是window系统,设置变量的命令需要使用set:
set EGG_SERVER_ENV=xx && npm run dev