eggjs / egg

🥚 Born to build better enterprise frameworks and apps with Node.js & Koa
https://eggjs.org
MIT License
18.9k stars 1.82k forks source link

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

Closed fionsay closed 6 months ago

fionsay commented 6 months ago

在此输入你需要反馈的 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

sinkhaha commented 6 months ago

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"

fionsay commented 6 months ago

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的内容

sinkhaha commented 6 months ago

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

sinkhaha commented 6 months ago

看源码可以知道只要设置 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 读取的逻辑)

fionsay commented 6 months ago

看源码可以知道只要设置 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

atian25 commented 6 months ago

有个 scope 的配置

fionsay commented 6 months ago

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

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