直接上代码:
//config/config.default.js
module.exports = {
keys: 'default keys',
url : 'ccc',
};
//config/config.prod.js
module.exports = {
keys: 'prod keys',
url : 'ddd',
};
//app/controller/home.js
exports.index = function* index(ctx) {
ctx.body = {
env: ctx.app.config.env,
config: ctx.app.config.keys,
url: ctx.app.config.url,
};
};
//页面返回
{"env":"prod ","config":"default keys","url":"ccc"}
//执行脚本
"scripts": {
"start": "node index.js",
"dev": "egg-bin dev",
"prd": "set EGG_SERVER_ENV=prod && npm start",
"test": "egg-bin test",
"autod": "autod"
}
>npm run prd
现在比较奇怪的是 env 已经是 prod ,为什么 prod 配置文件的内容没有被覆盖掉。
请按照issue模板提供信息。
从代码上看不出啥来,请提供一个最小可复现的代码库。
从你的代码来上看 node index.js 这个比较老的用法了,新的方式是 egg-scripts start,可以看下官方文档,部署那一章节。
另外,不建议自己配置 npm scripts,请 用通过 egg-init --type=simple 生成的 package.json
其实运行的就是 custom-env demo, 这个例子实在是太差了,没有达到demo的效果。。。
可以看看我刚刚提交的这个代码:[email protected]:ivwitxsc/koa2-eggjs.git
那个 demo 有点旧了,egg-scripts 上个月才出来的,欢迎 PR。
我本地跑了下,无法复现。
"prd": "set EGG_SERVER_ENV=prod && npm start"
我怀疑是这条指令的问题,环境变量是不是没传到后面去。你换为 https://www.npmjs.com/package/cross-env 看看
无法复现? 你运行我原来的那个demo的话,env是变化了,但是其他字段还是按照原来的default的字段。没有用prod的配置去覆盖。
使用一下语句就可以了, 原来的demo不清晰,这个还要自己摸索,我还以为直接是 EGG_SERVER_ENV=prod npm start
"prd": "cross-env EGG_SERVER_ENV=prod && egg-scripts start",
在 linux / mac 下是 EGG_SERVER_ENV=prod npm start 但你给的 demo 是 set EGG_SERVER_ENV=prod && npm start,我还以为你是 win 环境而改的。
另外,用 egg-scripts start 的话就不需要手动设置 env 了。
哈哈哈 谢谢你们的耐心解答,现在这里是弄懂了的 !
Most helpful comment
无法复现? 你运行我原来的那个demo的话,env是变化了,但是其他字段还是按照原来的default的字段。没有用prod的配置去覆盖。
使用一下语句就可以了, 原来的demo不清晰,这个还要自己摸索,我还以为直接是 EGG_SERVER_ENV=prod npm start