ionic通過(guò)配置環(huán)境變量區(qū)別生產(chǎn)和測(cè)試

之前在通過(guò)ionic開(kāi)發(fā)App進(jìn)行測(cè)試時(shí)该抒,由于生產(chǎn)和測(cè)試的接口,token策严,以及秘鑰等都不一樣穗慕,所以在進(jìn)行生產(chǎn)和測(cè)試切換的時(shí)候,每次都需要手動(dòng)修改接口的前綴ip(或者域名)妻导,token以及秘鑰逛绵,這樣就非常麻煩,而且發(fā)布生產(chǎn)或者測(cè)試時(shí)倔韭,極其容易出現(xiàn)失誤术浪。后來(lái)就想能否通過(guò)自動(dòng)化執(zhí)行編譯命令時(shí),附帶參數(shù)就能夠進(jìn)行自動(dòng)切換這些變量寿酌,于是谷歌并總結(jié)了如下方案胰苏。

下面是自己整理的文檔,如有表述不太清楚醇疼,歡迎指出硕并,共同交流學(xué)習(xí)。

原理

通過(guò)export key=value&&ionic cordova build --prod --release我們可以通過(guò)webpack配置獲取到環(huán)境變量key的值value來(lái)區(qū)別此刻命令行執(zhí)行的是開(kāi)發(fā)還是生產(chǎn)秧荆,然后通過(guò)此環(huán)境變量獲取對(duì)應(yīng)的變量值倔毙。

步驟

  1. 根目錄下package.json添加
"config": {
  "ionic_webpack": "./config/webpack.config.js"
}
  1. tsconfig.json添加配置
"baseUrl": "./src",
"paths": {
  "@app/env": [
    "environments/environment"
  ]
}
  1. 在根目錄新建config/webpack.config.js文件,并添如下代碼
var chalk = require("chalk");
var fs = require('fs');
var path = require('path');
var useDefaultConfig = require('@ionic/app-scripts/config/webpack.config.js');
var colors = require('colors');

var Build = process.env.BUILD;

var env = process.env.IONIC_ENV;
var pathConfig = path.resolve(environmentPath('dev'));

if (Build === "production") {  //通過(guò)環(huán)境變量判斷,為production則為生產(chǎn)乙濒,如果為非production則為測(cè)試
  pathConfig = path.resolve(environmentPath('prod'));
  console.log(colors.yellow("Production:", "Environment variables in file: "+ pathConfig + " using for production build."));
}else {
  console.log(colors.yellow("Test:", "Environment variables in file: "+ pathConfig + " using for test build."));
}

useDefaultConfig[env].resolve.alias = {
  "@app/env": pathConfig
};

if (env !== 'prod' && env !== 'dev') {
  // Default to dev config
  useDefaultConfig[env] = useDefaultConfig.dev;
  useDefaultConfig[env].resolve.alias = {
    "@app/env": path.resolve(environmentPath(env))
  };
}

function environmentPath(env) {
  var filePath = './src/environments/environment' + (env === 'prod' ? '' : '.' + env) + '.ts';
  if (!fs.existsSync(filePath)) {
    console.log(chalk.red('\n' + filePath + ' does not exist!'));
  } else {
    return filePath;
  }
}

module.exports = function () {
  return useDefaultConfig;
};
  1. 新建文件src/environments/environment.model.ts陕赃,并添加如下代碼
export interface Environment {
  domain: string;
  client_id: string;
  secret: string;
}
  1. 新建文件src/environments/environment.dev.ts,并添加如下代碼
import { Environment } from './environment.model';

export const ENV: Environment = {
  domain: 'value_dev',
  client_id: 'value_dev',
  secret: 'value_dev'
}
  1. 新建文件src/environments/environment.ts,并添加如下代碼
import { Environment } from './environment.model';

export const ENV: Environment = {
  domain: 'value_production',
  client_id: 'value_production',
  secret: 'value_production'
}
  1. 在需要用到變量的地方直接引入即可
    import { ENV } from '@app/env'凯正;
    ENV.domain, ENV.client_id, ENV.secret 都可以使用了。

  2. 通過(guò)腳本命令行來(lái)區(qū)別生產(chǎn)和測(cè)試(Linux下使用export key=value豌蟋,window下則使用 set key=value來(lái)設(shè)置環(huán)境變量)
    我設(shè)置的是BUILD變量廊散,這個(gè)變量可以自己去定義,但是在webpack.config.js中process.env.BUILD的BUILD改為你自定義的變量

根目錄下新建production.sh文件并添加命令行

export BUILD=production&&ionic cordova build --prod --release

根目錄下新建testing.sh文件并添加命令行

export BUILD=testing&&ionic cordova build --prod --release

Linux下直接執(zhí)行(window則在可以在git窗口中執(zhí)行或者將shell文件換成bat文件梧疲,并且將export改為set)

./testing.sh

or

./production.sh

PS: 剛開(kāi)始做的時(shí)候是使用 IONIC_ENV的prod和dev來(lái)區(qū)別的允睹,這樣雖然也可以實(shí)現(xiàn),但是存在一個(gè)痛點(diǎn)幌氮,那就是prod是壓縮過(guò)css和js的缭受,而dev則是沒(méi)有壓縮,這樣dev的就導(dǎo)致開(kāi)機(jī)的時(shí)候非常慢该互,所以給測(cè)試也是體驗(yàn)非常不好米者。于是就想到通過(guò)設(shè)置環(huán)境變量來(lái)區(qū)別生產(chǎn)和測(cè)試。

上面的colors插件是為了方便編譯者在編譯時(shí)看到此時(shí)是生產(chǎn)還是測(cè)試的編譯打包宇智。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔓搞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子随橘,更是在濱河造成了極大的恐慌喂分,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件机蔗,死亡現(xiàn)場(chǎng)離奇詭異蒲祈,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)萝嘁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門梆掸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人牙言,你說(shuō)我怎么就攤上這事沥潭。” “怎么了嬉挡?”我有些...
    開(kāi)封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵钝鸽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我庞钢,道長(zhǎng)拔恰,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任基括,我火速辦了婚禮颜懊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己河爹,他們只是感情好匠璧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著咸这,像睡著了一般夷恍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上媳维,一...
    開(kāi)封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天酿雪,我揣著相機(jī)與錄音,去河邊找鬼侄刽。 笑死指黎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的州丹。 我是一名探鬼主播醋安,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼墓毒!你這毒婦竟也來(lái)了茬故?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蚁鳖,失蹤者是張志新(化名)和其女友劉穎磺芭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體醉箕,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钾腺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了讥裤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片放棒。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖己英,靈堂內(nèi)的尸體忽然破棺而出间螟,到底是詐尸還是另有隱情,我是刑警寧澤损肛,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布厢破,位于F島的核電站,受9級(jí)特大地震影響治拿,放射性物質(zhì)發(fā)生泄漏摩泪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一劫谅、第九天 我趴在偏房一處隱蔽的房頂上張望见坑。 院中可真熱鬧嚷掠,春花似錦、人聲如沸荞驴。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)熊楼。三九已至霹娄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間孙蒙,已是汗流浹背项棠。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工悲雳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挎峦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓合瓢,卻偏偏與公主長(zhǎng)得像坦胶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晴楔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355