Разрабатываете экспресс-приложение на основе узлов? У вас есть dotenv, .env и т. Д. Вы разрабатываете приложение на Angular? ng CLI поддерживает переменные env. Но, используя Ionic CLI? Эта статья для вас!

Для проекта Ionic у вас может быть другой URL-адрес Backend (локальный, производственный и т. Д.) Или некоторые другие переменные конфигурации, основанные на сборках prod или dev. В ionic CLI нет простого способа передать некоторые флаги для изменения среды. Но нет ничего невозможного! Вот мой способ сделать это, мой технический директор называет это ultra-jugaad (на хинди), надеюсь, это поможет: P

ШАГ №1 - перекрестное соединение

установить этот модуль узла глобально,

npm i cross-env -g

ШАГ № 2 - Среда

Создайте эти файлы для установки переменных среды, в моем случае есть две среды prod и dev. Итак, у меня в папке три файла

SRC / среды / environment.ts

export var environment = {   //THIS IS FOR DEFAULT VALUES
     BASE_URL:’http://localhost:3000/api’,
     someVar:'someVal'
     ....
}

SRC / среды / environment.prod.ts

export var environment = {   //THIS IS FOR PROD VALUES
BASE_URL:’https://prod.server.com/api’,
     someProdVar:'someProdVal'
     ....
}

SRC / среды / environment.dev.ts

export var environment = {   //THIS IS FOR DEV VALUES
BASE_URL:’http://localhost:3000/api’,
     someDevVar:'someDevVal'
     ....
}

ШАГ № 3 - Используйте ценности окружающей среды

Поскольку environment.ts экспортируется, вы можете импортировать в любой инъекционный компонент / компонент, в котором используется значение. (Импортируйте только environment.ts, а не другие файлы)

Пример

import { environment as ENV } from ‘src/environments/environment’ ;
export class SomeLaLaClass{
   constructor(){
      console.log(ENV.BASE_URL); //prints base url value from env
   }
}

ШАГ №4 - Сценарий

создайте следующий скрипт в ./bin/www

script.js

var fs = require('fs');
function readWriteSync() {
let env = process.env.ENV;
if (!process.env.ENV) {
          env = 'dev';  //SETTING DEFAULT ENV AS DEV
}
var data = fs.readFileSync(`src/environments/environment.${env}.ts`, 'utf-8');
fs.writeFileSync('src/environments/environment.ts', data, 'utf-8');
console.log('readFileSync complete');
}
readWriteSync();

ШАГ # 5 - Крючки

Единственное, что сделало весь этот процесс возможным, - это перехватчики сборки Ionic CLI. Их можно добавить в package.json.

package.json

{
“name”: “My Awesome App”,
“description”: “Its awesome and you know it!”,
“version”: “0.0.1”,
“author”: “The Mankala”,
“homepage”: “http://mankala.com/",
“scripts”: {
“clean”: “ionic-app-scripts clean”,
“build”: “ionic-app-scripts build”,
“lint”: “ionic-app-scripts lint”,
“ionic:build”: “node ./src/bin/script.js ionic-app-scripts build”,
“ionic:serve”: “ionic-app-scripts serve”,
“ionic:watch:before”: “node ./src/bin/script.js”,
“ionic:build:before”: “node ./src/bin/script.js”
},
dependencies:{
      ...
      ...
}

ionic: watch: before - это перехватчик, вызываемый до ionic serve
(ionic: serve: before для Ionic 4 и более поздних версий)

ionic: build: before - это хук, вызываемый до ionic build

Сценарий вызывается перед сборкой / обслуживанием проекта, поэтому env копируется из env.prod или env.dev в env.

ШАГ # 6 - Казнь

Перехватчики используются для вызова скрипта перед подачей / сборкой, но нам нужно сообщить CLI о env, который нужно скопировать, для этого используется Шаг №1!

Для обслуживания вы можете перейти к терминалу и ввести (например, Dev Environment)

cross-env ENV=’dev’ ionic serve

Для сборки вы можете перейти в терминал и ввести (например, Prod Environment и платформа Android)

cross-env ENV=’prod’ ionic cordova build android 

Вот и все, пока Ionic CLI не представит функцию env, это работает хорошо!
Надеюсь, это поможет!