当前位置:   article > 正文

uniapp(vuecli创建) 动态配置manifest.json文件_项目下缺少manifest.json文件

项目下缺少manifest.json文件

因为uniapp项目同时要适配h5跟小程序,并且走两套不同的登陆系统,h5普通的vue项目相信大家都不陌生,这就有个问题所在

如何配置proxy去代理请求地址(主要是h5区分线上与测试)

manifest.json文件中

  1. {
  2. "h5": {
  3. "router": { "mode": "history", "base": "/" },
  4. "devServer": {
  5. "port": 8000,
  6. "disableHostCheck": true,
  7. "proxy": {
  8. "/myapi": {
  9. "changeOrigin": true,
  10. "secure": false,
  11. "pathRewrite": { "^/myapi": "/myapi" },
  12. "target": ""
  13. }
  14. }
  15. }
  16. },
  17. }

这里的target就是需要动态去切换线上或者测试的,但是json文件我们无法去写表达式或者变量,所以我们可以利用node来进行这一流程,总体思路如下:通过node读取manifest.json文件,然后判断当前环境,动态写入target,具体实现如下:

根目录下新建env.dev.js与env.prod.js,内容如下,自己去根据实际变更env与dev的地址:

  1. module.exports = {
  2. VUE_APP_REMOTE_HOST: 'http://dev.com',
  3. }

然后在manifest的同级目录下新建modifyManifest.js文件(这个文件用node启动去读写json文件)

因为使用了JSON.parse,所以mainfest.json文件里面不能有注释

  1. // 这个文件主要是为了动态写入h5的proxy代理地址,因为此时服务还未正式运行,他们的process.env.VUE_APP_REMOTE_HOST还没有确定好,只能取到
  2. // 当前环境,所以判断一下,然后动态写入mainfest.json
  3. // 如果也想要使用这个node配置其他端应用的话,可以先修改此文件,然后更改package.json的启动命令,如 dev:h5那里,再确定环境之后增加一句 node src/modifyManifest.js &&
  4. const fs = require('fs')
  5. const envDev = require('../env.dev') //development配置信息
  6. const envPrd = require('../env.prod') //production配置信息
  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. // 核心代码是这一行,动态配置h5的代理地址
  13. const allProxy = Object.keys(_data['h5'].devServer.proxy)
  14. allProxy.forEach(item => {
  15. if (process.env.NODE_ENV === 'development') {
  16. _data['h5'].devServer.proxy[item].target = envDev.VUE_APP_REMOTE_HOST
  17. } else {
  18. _data['h5'].devServer.proxy[item].target = envPrd.VUE_APP_REMOTE_HOST
  19. }
  20. })
  21. _data = JSON.stringify(_data)
  22. // 写入
  23. fs.writeFile(
  24. `${__dirname}/manifest.json`,
  25. _data,
  26. {
  27. encoding: 'utf-8'
  28. },
  29. function (err) {
  30. if (err) {
  31. console.log('写入失败', err)
  32. } else {
  33. console.log('写入成功')
  34. }
  35. }
  36. )
  37. }
  38. })

然后在package.json的启动命令处,手动增加启动node的命令,如下

  1. build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 node src/modifyManifest.js&&vue-cli-service uni-build",
  2. "dev:h5": "cross-env NODE_ENV=development UNI_PLATFORM=h5 node src/modifyManifest.js&&vue-cli-service uni-serve",

增加的是node src/modifyManifest.js&&   ,切记要在NODE_ENV=development确定了环境之后再启动,具体启动命令可以根据个人项目去改变

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

闽ICP备14008679号