当前位置:   article > 正文

uniapp发行时动态修改manifest.json参数_process.env.uni_input_dir

process.env.uni_input_dir

需求背景:
由于项目的测试环境和生产环境需要部署到域名根目录下的不同目录,所以需要在发行时动态修改路由的 base 路径,手动修改容易遗漏出错,于是便有了该需求
话不多说直接上代码
在vue.config.js文件添加如下代码

const fs = require('fs')
//此处如果是用HBuilderX创建的项目manifest.json文件在项目跟目录,如果是 cli 创建的则在 src 下,这里要注意
//process.env.UNI_INPUT_DIR为项目所在的绝对路径,经测试,相对路径会找不到文件
const manifestPath = process.env.UNI_INPUT_DIR + '/manifest.json'
let Manifest = fs.readFileSync(manifestPath, { encoding: 'utf-8' })
function replaceManifest(path, value) {
  const arr = path.split('.')
  const len = arr.length
  const lastItem = arr[len - 1]

  let i = 0
  let ManifestArr = Manifest.split(/\n/)

  for (let index = 0; index < ManifestArr.length; index++) {
    const item = ManifestArr[index]
    if (new RegExp(`"${arr[i]}"`).test(item)) ++i;
    if (i === len) {
      const hasComma = /,/.test(item)
      ManifestArr[index] = item.replace(new RegExp(`"${lastItem}"[\\s\\S]*:[\\s\\S]*`), `"${lastItem}": ${value}${hasComma ? ',' : ''}`)
      break;
    }
  }

  Manifest = ManifestArr.join('\n')
}
// 动态修改 h5 路由 base
if (process.env.NODE_ENV === 'production'){
	//生产的 base
    replaceManifest('h5.router.base', '"/basePathPro/"')
}else {
	//测试的 base
    replaceManifest('h5.router.base', '"/basePath/"')
}

fs.writeFileSync(manifestPath, Manifest, {
  "flag": "w"
})
module.exports = {
	......
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

更多参数修改请参考官方文档:uniapp 官方文档

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/273939
推荐阅读
相关标签
  

闽ICP备14008679号