当前位置:   article > 正文

uniapp 自定义发行 动态修改 manifest.json

uniapp 自定义发行

这边需求是根据不同的打包环境 设置不同的标题以及路径。方便各种调试。防止 每次手动每次修改 manifest.json 出错

 uniapp 自定义发行:

添加自定义发行之后 Hbuilder 编辑器会自动多 出来按钮

官方文档:概述 | uni-app官网

我这里的配置是这样: package.json

这里主要用于显示两个按钮以及设置相关 字段:

  1. {
  2. "dependencies": {
  3. "js-md5": "^0.7.3",
  4. "moment": "^2.29.4"
  5. },
  6. "uni-app": {
  7. "scripts": {
  8. "h5_prod": {
  9. "title": "品创收银台",
  10. "env": {
  11. "UNI_PLATFORM": "h5",
  12. "NODE_ENV": "prod",
  13. "UNI_OUTPUT_DIR": "dist/build/h5_prod"
  14. },
  15. "router": {
  16. "mode": "history",
  17. "base": "/payment/h5/"
  18. },
  19. "define": {
  20. "H5_PROD": true
  21. }
  22. },
  23. "h5_uat": {
  24. "title": "品创收银台uat",
  25. "env": {
  26. "UNI_PLATFORM": "h5",
  27. "NODE_ENV": "uat",
  28. "UNI_OUTPUT_DIR": "dist/build/h5_uat"
  29. },
  30. "router": {
  31. "mode": "history",
  32. "base": "/payment/h5_uat/"
  33. },
  34. "define": {
  35. "H5-UAT": true
  36. }
  37. }
  38. }
  39. }
  40. }

 设置网页标题和 base 路径:

 

动态修改 manifest.json 

需求是 根据发布:  h5_prod / h5_uat  来动态修改  manifest.json 文件

官方文档: uni-app官网

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

我这里 代码主要是 判断按钮的来源进行处理:

  1. console.log('process.env[UNI_SCRIPT]:', process.env['UNI_SCRIPT'])
  2. if (process.env['UNI_SCRIPT'] == 'h5_prod') {
  3. replaceManifest('h5.title', '"品创收银台"')
  4. replaceManifest('h5.router.base', '"/payment/h5/"')
  5. } else if (process.env['UNI_SCRIPT'] == 'h5_uat') {
  6. replaceManifest('h5.title', '"品创收银台uat"')
  7. replaceManifest('h5.router.base', '"/payment/h5_uat/"')
  8. }

 完整代码如下:(贴出来的代码 没有删除注释 留作它用)

  1. const fs = require('fs')
  2. //此处如果是用HBuilderX创建的项目manifest.json文件在项目跟目录,如果是 cli 创建的则在 src 下,这里要注意
  3. //process.env.UNI_INPUT_DIR为项目所在的绝对路径,经测试,相对路径会找不到文件
  4. const manifestPath = process.env.UNI_INPUT_DIR + '/manifest.json'
  5. let Manifest = fs.readFileSync(manifestPath, {
  6. encoding: 'utf-8'
  7. })
  8. function replaceManifest(path, value) {
  9. const arr = path.split('.')
  10. const len = arr.length
  11. const lastItem = arr[len - 1]
  12. let i = 0
  13. let ManifestArr = Manifest.split(/\n/)
  14. for (let index = 0; index < ManifestArr.length; index++) {
  15. const item = ManifestArr[index]
  16. if (new RegExp(`"${arr[i]}"`).test(item)) ++i;
  17. if (i === len) {
  18. const hasComma = /,/.test(item)
  19. ManifestArr[index] = item.replace(new RegExp(`"${lastItem}"[\\s\\S]*:[\\s\\S]*`),
  20. `"${lastItem}": ${value}${hasComma ? ',' : ''}`)
  21. break;
  22. }
  23. }
  24. Manifest = ManifestArr.join('\n')
  25. }
  26. console.log('process.env[UNI_SCRIPT]:', process.env['UNI_SCRIPT'])
  27. if (process.env['UNI_SCRIPT'] == 'h5_prod') {
  28. replaceManifest('h5.title', '"品创收银台"')
  29. replaceManifest('h5.router.base', '"/payment/h5/"')
  30. } else if (process.env['UNI_SCRIPT'] == 'h5_uat') {
  31. replaceManifest('h5.title', '"品创收银台uat"')
  32. replaceManifest('h5.router.base', '"/payment/h5_uat/"')
  33. }
  34. fs.writeFileSync(manifestPath, Manifest, {
  35. "flag": "w"
  36. })
  37. module.exports = {
  38. }
  39. // module.exports = {
  40. // chainWebpack: config => {
  41. // console.log("process.env.BUILD_TYPE:------------------:", process.env['UNI_SCRIPT'])
  42. // console.log("config:------------------:", process['UNI_MANIFEST'])
  43. // //console.log("config:------------------:", config)
  44. // // config
  45. // // .plugin('define')
  46. // // .tap(args => {
  47. // // args[0]['process.env'].VUE_APP_TEST = '"test"'
  48. // // return args
  49. // // })
  50. // if (process.env['UNI_SCRIPT'] == 'h5_prod') {
  51. // process['UNI_MANIFEST']['h5']['title'] = '"品创收银台"'
  52. // process['UNI_MANIFEST']['h5']['router'] = {
  53. // mode: 'history',
  54. // base: '/payment/h5/'
  55. // }
  56. // } else if (process.env['UNI_SCRIPT'] == 'h5-uat') {
  57. // process['UNI_MANIFEST']['h5']['title'] = '"品创收银台uat"'
  58. // process['UNI_MANIFEST']['h5']['router'] = {
  59. // mode: 'history',
  60. // base: '/payment/h5_uat/'
  61. // }
  62. // }
  63. // return config
  64. // // console.log("config:------------------:", process['UNI_MANIFEST'])
  65. // // config
  66. // // .plugin('define')
  67. // // .tap(args => {
  68. // // console.log("args: ", args)
  69. // // // 在这里也可以写全局的变量
  70. // // return args
  71. // // })
  72. // // console.log(config.Manifest)
  73. // // return config
  74. // }
  75. // }
  76. // module.exports = {
  77. // defineConfig: Manifest
  78. // }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/273938
推荐阅读