linux ionic环境搭建,【技巧】ionic3多环境配置详解

本文介绍了如何优雅地处理Ionic项目的多个开发环境,包括prod、dev和test环境。通过创建不同的配置文件(如dev.json和prod.json),结合环境变量和Webpack配置,动态注入环境变量到代码中。此外,还提供了处理多个环境变量的方法,利用Node的环境变量(如RUN_ENV)和cross-env包,确保在不同环境下正确读取相应的配置。
摘要由CSDN通过智能技术生成

一个项目常常会有几个开发环境:

prod

dev

test

对于发布调试,不少人采用的是改变常量的方式来构建,如:

// domain = "http://192.168.93.35:9003/demo"; //正式环境

domain = "http://localhost:8080/demo-rest"; //测试环境

这种方式稍显麻烦,也容易误操作,而比较优雅的方式是通过配置文件和命令行参数结合来实现。

也可以试着我下面说的使用,这是我看国外一篇文章的方法,但是有个bug被我处理了,而原文链接我没保存,所以不贴原文了。

原理是通过环境变量读取同名配置文件。

步骤:

一、创建配置文件

ionic只(特别注意“只”字)使用了dev和prod两个环境,通过IONIC_ENV环境变量存储,如果你觉得够用了,就借用该变量,否则就自定义环境变量。此时创建两个配置文件:

config/dev.json

config/prod.json

内容类似如下:

{

"mode": "prod",

"url": "http://prod"

}

二、使用自定义webpack配置项

这是ionic多环境配置几种方案中的共同核心部分,打开 package.json 文件,在根节点添加如下内容:

"config": {

"ionic_webpack": "./config/webpack.config.js"

},

同时新建文件:

config/webpack.config.js

里面内容为:

const webpackConfig = require('../node_modules/@ionic/app-scripts/config/webpack.config');

const webpack = require('webpack');

const ENV = process.env.IONIC_ENV;

const envConfigFile = require(`./${ENV}.json`);

const modeConfig = envConfigFile.mode;

const urlConfig = envConfigFile.url;

webpackConfig[ENV].plugins.push(

new webpack.DefinePlugin({

webpackGlobalVars: {

mode: JSON.stringify(modeConfig),

url: JSON.stringify(urlConfig)

}

})

);

意思好理解,就是读取json配置文件的值给自定义webpack插件。

三、使用自定义服务来调用自定义变量

在自定义的Provider中使用webpackGlobalVars即可,在此新建一个ConfigurationProvider来测试下:

import { Injectable } from '@angular/core';

declare const webpackGlobalVars: any;

@Injectable()

export class ConfigurationProvider {

static getDomainInfo(): any {

const domainInfo = webpackGlobalVars;

return domainInfo;

}

static test(){

alert(JSON.stringify(webpackGlobalVars));

}

}

当执行ionic serve时,编译使用的是dev的环境,所以会弹出dev.json的内容:

dfd9936afdeb

image.png

而使用--prod参数打包后,使用的会是prod.json的内容。

补充扩展——三个或者以上环境变量处理

因为ionic使用IONIC_ENV环境变量,默认只支持dev和prod两种环境,对于增加像test、local等环境是不支持,这时这可借助Node的自定义环境变量进行操作。

Node的环境变量可以这样设置:

Windows: set NODE_ENV=env

Linux或Mac: export NODE_ENV=env

这样会存在开发环境差异,建议安装cross-env实现统一配置:

统一开发环境:

安装:npm i cross-env -D

使用:cross-env NODE_ENV=env

所以,保持前文所说的内容,调整如下:

1. package.json修改为以下之一:

Windows:

"scripts": {

"start": "set RUN_ENV=test && ionic-app-scripts serve",

"build": "set RUN_ENV=prod && ionic-app-scripts build --prod",

}

Linux或Mac:

"scripts": {

"start": "export RUN_ENV=test && ionic-app-scripts serve",

"build": "export RUN_ENV=prod && ionic-app-scripts build --prod",

}

统一环境(注意这里没有“&&”):

"scripts": {

"start": "cross-env RUN_ENV=test ionic-app-scripts serve",

"build": "cross-env RUN_ENV=prod ionic-app-scripts build --prod",

}

2. webpack.config.js修改为:

const webpackConfig = require('../node_modules/@ionic/app-scripts/config/webpack.config');

const webpack = require('webpack');

const ENV = process.env.IONIC_ENV;

const RUN_ENV = process.env.RUN_ENV || 'dev';

console.log(`当前环境:${RUN_ENV}`);

const envConfig = require(`./${RUN_ENV}.json`);

// 把配置项灵活添加到webpack配置

let globalVars = {};

for(var item in envConfig){

globalVars[item] = JSON.stringify(envConfig[item]);

}

//注意这里是ENV,因为这是覆盖Ionic的默认webpack配置,Ionic只有dev和prod两项配置,填其它会报错,直接取IONIC_ENV就行了,test、local等配置项实际仍是挂在原有的打包环境下的。

webpackConfig[ENV].plugins.push(

new webpack.DefinePlugin({

webpackGlobalVars: globalVars

})

);

这样就大功告成了,其中注意这个注释说明:

注意这里是ENV,因为这是覆盖Ionic的webpack配置,Ionic只有dev和prod两项配置,填其它会报错,直接取IONIC_ENV就行了,test、local等配置项实际仍是挂在原有的打包环境下的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值