我正試圖找到一個很好的解決方案,以便在運行時基於標誌將環境變量動態注入到Ionic2應用程序中。對於我的用例,我需要支持比默認的dev/prod選項更多的功能。 (例如dev/test/qa/prod)。Ionic中的動態環境變量 - 無法找到模塊
我主要是立足我的做法上有一些調整如下:https://github.com/gshigeto/ionic-environment-variables
環境標誌我設置爲APP_ENV,只是離子命令之前,就像這樣:
APP_ENV=dev ionic serve
在編譯時,我使用自定義的webpack.config文件將env.ts文件替換爲目標環境的.ts文件。這看起來是這樣的:
./config/Webpack.config
var path = require('path');
var defaultConfig = require('@ionic/app-scripts/config/webpack.config.js');
var env = process.env.APP_ENV;
if (!defaultConfig[env]) {
defaultConfig[env] = defaultConfig["dev"];
}
defaultConfig[env].resolve.alias = {
"@app/env": path.resolve('./src/env/env.' + env + '.ts')
};
module.exports = function() {
return defaultConfig;
};
,我告訴離子約我自定義的WebPack配置在這裏:
./package.json
"config": {
"ionic_webpack": "./config/webpack.config.js"
},
此外,我更新了我的tsconfig.json讓我的編譯器知道如何解決已經別名:
./tsconfig.json
{
"compilerOptions": {
...
"baseUrl": "./src",
"paths": {
"@app/env": [
"env/env"
]
}
},
...
}
我再定義環境變量像這樣的文件:
./src/env/env.dev.ts
export const ENV = {
API_URL: "http://dev-url.com/"
}
./src/env/env.test.ts
export const ENV = {
API_URL: "http://test-url.com/"
}
./src/env/env.prod.ts
export const ENV = {
API_URL: "http://prod-url.com/"
}
然後我在進口拉動,我想使用的文件:
./src/ app/pages/home/home.ts
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { ENV } from '@app/env';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
constructor(public navCtrl: NavController) {
console.log(ENV.API_URL);
}
}
這很適合用於dev或我指定的任何其他環境,並且控制檯登出適當的URL。
然而,當我運行:
APP_ENV=prod ionic serve --prod
,
我得到如下:
Error: Cannot find module "@app/env"
at Object.192 (http://localhost:8100/build/main.js:44:7)
at __webpack_require__ (http://localhost:8100/build/vendor.js:55:30)
at Object.261 (http://localhost:8100/build/main.js:157:75)
at __webpack_require__ (http://localhost:8100/build/vendor.js:55:30)
at Object.212 (http://localhost:8100/build/main.js:99:73)
at __webpack_require__ (http://localhost:8100/build/vendor.js:55:30)
at Object.193 (http://localhost:8100/build/main.js:81:70)
at __webpack_require__ (http://localhost:8100/build/vendor.js:55:30)
at webpackJsonpCallback (http://localhost:8100/build/vendor.js:26:23)
at http://localhost:8100/build/main.js:1:1
我真的不知道什麼是關於督促比任何其他環境如此不同。我錯過了什麼嗎?
第一個偉大的工作!你介意如果我編輯你的答案,以包含稍作修改的版本供他人蔘考? –
太棒了!是的,這是一個好主意,隨時編輯它。 – ganey