我有一个 Angular 9 应用程序,在其中我从资产文件夹中读取了 api url:
@Injectable()
export class ConfigService {
private configUrl = '../../../assets/config/config.json';
constructor(private loggerService: LoggerService) { }
public async loadConfig(): Promise<any> {
try {
const response = await fetch(this.configUrl);
if (!response.ok) {
throw new Error(response.statusText);
}
return await response.json();
} catch (err) {
this.loggerService.error(`ConfigService 'loadConfig' threw an error on calling ${this.configUrl} : ${err.tostring()}`);
}
}
}
用于读取配置文件的方法在构建后配置 Angular 生产文件中进行了描述。
environment.ts
是
export const environment = {
production: false,
apiUrl: "https://localhost/api/",
};
environment.prod.ts
是
export const environment = {
production: true,
apiUrl: "https://server/api/",
};
config.json
是
{
"apiUrl": "http://someTestServer/api/"
}
要复制到的不完整脚本apiUrl
config.json
var fs = require("fs");
fs.readFile(`./src/environments/environment.${process.env.CONFIG}.ts`, 'utf8', function (err, data) {
fs.writeFile('./src/assets/config/config.json', data, function (err) {
if (err) throw err;
console.log('complete');
});
});
我的 package.json 脚本部分如下所示:
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"build-test": "CONFIG=test node update-config.js && npm run build",
"build-prod": "CONFIG=prod node update-config.js && npm run predeploy",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"predeploy": "ng build --prod",
"deploy": "node ftpdeploy.js"
}
考虑到上述情况:如何config.json
根据不同的环境变量在构建之前自动填充文件的内容,这样我就不需要手动将 json 文件复制并粘贴到\dist
文件夹中?
更新 1:现在我可以将 enviroment.xxx.ts 的内容复制到 config.json 文件中。还有一个问题:当我从 environment.xxx.ts 复制内容时,它会将 environment.xxx.ts 的全部内容复制到 config.json 中(它还复制了我的 enviroment.xxx.ts 的导入部分)但是预期结果是将environment
( export const environment
) 读入对象并根据源environment
对象更新 config.json。我怎样才能做到这一点?