当前位置:   article > 正文

uni-app环境变量 & 动态配置manifest.json

uni-app环境变量 & 动态配置manifest.json

目录

环境变量

配置

页面使用

动态配置manifest.json

创建env文件

创建 vue.config.js

 总结


环境变量

uni-app 通过在package.json文件中增加uni-app扩展节点,可实现自定义条件编译平台。

扩展新的平台后,有3点影响:

  1. 可以在代码里编写自定义的条件编译,为这个新平台编写专用代码
  2. 运行时可以执行面向新平台的编译运行
  3. 发行时可以执行面向新平台的编译发行

配置

注意只能扩展web和小程序平台,不能扩展app打包。并且扩展小程序平台时只能基于指定的基准平台扩展子平台,不能扩展基准平台。基准平台详见下文。

根新建package.json扩展配置用法:

  1. {
  2. "uni-app": {
  3. "scripts": {
  4. "dev": {
  5. "title": "build:dev",
  6. "env": {
  7. "UNI_PLATFORM": "h5",
  8. "H_NODE_ENV": "dev",
  9. "H_BASEURL": "/heat",
  10. "H_REDIRECT": "xxx"
  11. }
  12. },
  13. "test": {
  14. "title": "build:test",
  15. "env": {
  16. "UNI_PLATFORM": "h5",
  17. "H_NODE_ENV": "test",
  18. "H_BASEURL": "/test-heat",
  19. "H_REDIRECT": "xxx"
  20. }
  21. },
  22. "prod": {
  23. "title": "build:prod",
  24. "env": {
  25. "UNI_PLATFORM": "h5",
  26. "H_NODE_ENV": "prod",
  27. "H_BASEURL": "/heat",
  28. "H_REDIRECT": "xxx"
  29. }
  30. }
  31. }
  32. }
  33. }

Tips:

  • UNI_PLATFORM仅支持填写uni-app默认支持的基准平台,目前仅限如下枚举值:h5mp-weixinmp-alipaymp-baidump-toutiaomp-qq
  • browser 仅在UNI_PLATFORMh5时有效,目前仅限如下枚举值:chromefirefoxieedgesafarihbuilderx
  • package.json文件中不允许出现注释,否则扩展配置无效
  • vue-cli需更新到最新版,HBuilderX需升级到 2.1.6+ 版本

页面使用

大家可以看到,多了配置的运行模式

 

页面使用

注意 直接输出值查看 输出env整个对象看不到这个值

  1. const instance = new WxRequest({
  2. baseURL: process.env.H_BASEURL || '/heat',
  3. timeout: 60000,
  4. });
  5. console.log(process.env.H_BASEURL, 'process.env.H_BASEURL');

动态配置manifest.json

根目录下新建新建环境相关变量配置文件env.js

创建env文件

其中变量对象名称要和package.json文件中定义的key保持一致,方便后续通过对象方式直接取值。变量对象中添加的是需要根据不同环境配置的变量,比如后端服务请求地址,小程序appid和一些别的插件key

  1. // 不同的环境变量配置
  2. const dev = {
  3. requestBaseUrl: 'http://xxx',
  4. }
  5. const test = {
  6. requestBaseUrl: 'https://xxx',
  7. }
  8. const prod = {
  9. requestBaseUrl: 'https://xxx',
  10. }
  11. const ENV_CONFIG = {
  12. dev,
  13. test,
  14. prod
  15. }
  16. module.exports = ENV_CONFIG

创建 vue.config.js

这里需要在 项目根路径下创建:vue.config.js 文件

重新读取写入 manifest,json

 fs.readFile 读取的json 文件中不能有注释,读取成功的返回值是buffer(二进制)数据,想获得原字符串内容需要用toString()转换一下

  1. const fs = require('fs');
  2. const ENV_CONFIG = require('./env.js')
  3. const target = ENV_CONFIG[process.env.UNI_SCRIPT].requestBaseUrl || "http://xxxx";
  4. console.log(process.env.UNI_SCRIPT, '当前环境');
  5. console.log(target, "代理的地址");
  6. try {
  7. fs.readFile(`${__dirname}/manifest.json`, function(err, data) {
  8. if (err) {
  9. console.error(err);
  10. } else {
  11. var _data = JSON.parse(data.toString());
  12. _data['h5'].devServer = {
  13. "https": false,
  14. "port": "8080",
  15. "disableHostCheck": true,
  16. "proxy": {
  17. "/": {
  18. "target": target,
  19. "changeOrigin": true,
  20. "secure": true
  21. }
  22. }
  23. };
  24. _data = JSON.stringify(_data, null, 2);
  25. // 写入
  26. fs.writeFile(`${__dirname}/manifest.json`, _data, {
  27. encoding: "utf-8"
  28. }, function(err) {
  29. if (err) {
  30. console.log('写入失败', err);
  31. } else {
  32. console.log('写入成功');
  33. }
  34. });
  35. }
  36. });
  37. } catch (e) {
  38. console.log(111);
  39. }

注意:此时通过process.env.H_NODE_ENV是获取不到package.json配置的H_NODE_ENV的,通过打印process.env可以看到

UNI_SCRIPT能获取到我们定义的环境名称,也就是package.json配置的自定义编译名称,这样就能根据以下形式获取不同的环境信息了

ENV_CONFIG[process.env.UNI_SCRIPT].requestBaseUrl

 总结

1.需要本地调试时,点击HBuilder X工具栏“运行”,选择自定义的对应的环境;

2.代码中通过process.env.H_BASEURL获取package.json配置的变量,或者全局注册或者局部引入env.js 通过 ENV_CONFIG[process.env.UNI_SCRIPT].requestBaseUrl获取

3.发布时, 点击HBuilder X工具栏“运行”,选择自定义的对应的环境,编译后打开微信开发者工具或者支付宝开发者工具,上传即可(运行的哪个环境,上传的就是哪个环境),也可以点击HBuilder X工具栏 "发行" ,选择自定义的对应的环境

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/625193
推荐阅读
相关标签
  

闽ICP备14008679号