我正在使用Heroku管道工作流程,该工作流程使用动态生成的URL部署审阅应用程序。例如,假设我的生产应用程序部署在mykickassapp.herokuapp.com,每次我将在repo中制作PR,Heroku会自动在mykickassapp-pr-50.herokuapp.com上部署该PR。
在我的客户端代码中,我使用环境文件并在其中存储我的应用程序URL,在上面的示例中:mykickassapp.herokuapp.com。问题是它显然不适用于在不同的动态生成的URL上部署的评论应用程序。值得庆幸的是,Heroku将应用程序的URL存储在环境变量中。但问题是如何将其纳入Angular应用程序的客户端?
我的应用程序使用标准的Angular-CLI生产构建过程。
答案 0 :(得分:4)
我很想知道是否有人有更好或更简单的方法来做到这一点,但这是我提出的解决方案。
我创建了一个小js脚本,我保存在项目根目录下的config.js文件中。然后我在npm postinstall脚本中添加了该脚本,以便在构建之前运行。
<强> /src/environments/environment.prod.ts 强>
export const environment = {
production: true,
URL: 'https://mykickassapp.herokuapp.com/'
};
<强> config.js 强>
const fs = require("fs");
const appName = process.env.HEROKU_APP_NAME;
if (appName) {
const data = fs.readFileSync('./src/environments/environment.prod.ts', 'utf-8');
const appURL = `URL: 'https://${appName}.herokuapp.com',`;
const newValue = data.replace(/URL:(.*)/g, appURL);
console.log(newValue);
fs.writeFileSync('./src/environments/environment.prod.ts', newValue, 'utf-8');
}
<强>的package.json 强>
...
"scripts": {
...
"test": "cross-env DEBUG=true jasmine",
"postinstall": "node config.js && ng build --aot --prod"
},
...