uniapp 打包的时候替换appId

根目录添加autoBuild.js

const chalk = require('chalk')
const shell = require('shelljs')
const FS = require('fs')
const paths = require('path')

const errorLog = (error) => console.log(chalk.red(`---------------> ${error}`))
const defaultLog = (log) => console.log(chalk.blue(`---------------> ${log}`))
const successLog = (log) => console.log(chalk.green(`---------------> ${log}`))

// 读取文件,并且替换文件中指定的字符串
const replaceFile = function (filePath, sourceRegx, targetStr) {
  return new Promise((resolve) => {
    FS.readFile(filePath, function (err, data) {
      if (err) {
        errorLog(err)
        return err
      }
      let str = data.toString()
      str = str.replace(sourceRegx, targetStr)
      FS.writeFile(filePath, str, function (err) {
        if (err) return err
        successLog('替换成功')
        resolve()
      })
    })
  })
}
const replaceAppid = async (isReturn = false) => {
  defaultLog('开始替换appid')
  // 遍历statics文件夹,找到main_*.js
  return new Promise((resolve, reject) => {
    FS.readdir('./src/utils', (err, files) => {
      if (err) {
        errorLog(err)
        reject(err)
        return err
      }
      if (files.length != 0) {
        files.forEach((item) => {
          const path = `./src/utils/${item}`
          // 判断文件的状态,用于区分文件名/文件夹
          FS.stat(path, async (err, status) => {
            if (err) {
              errorLog(err)
              reject(err)
              return err
            }
            const isFile = status.isFile() // 是文件
            if (isFile) {
              if (item.match(/^config.*$/)) {
                defaultLog('替换config.js')
                //-------命令自己替换------
                if (isReturn) {
                  await replaceFile(
                    path,
                    /const buildFlag = 'ABuild'/g,
                    "const buildFlag = 'BBuild'"
                  )
                } else {
                  await replaceFile(
                    path,
                    /const buildFlag = 'BBuild'/g,
                    "const buildFlag = 'ABuild'"
                  )
                }
                resolve(true)
              }
            }
          })
        })
      }
    })
  })
}
const replaceManifestJsonAppid = async (isReturn = false) => {
  defaultLog('开始替换appid')
  // 遍历statics文件夹,manifest.json
  return new Promise((resolve, reject) => {
    FS.readdir('./src', (err, files) => {
      if (err) {
        errorLog(err)
        reject(err)
        return err
      }
      if (files.length != 0) {
        files.forEach((item) => {
          const path = `./src/${item}`
          // 判断文件的状态,用于区分文件名/文件夹
          FS.stat(path, async (err, status) => {
            if (err) {
              errorLog(err)
              reject(err)
              return err
            }
            const isFile = status.isFile() // 是文件
            if (isFile) {
              if (item.match(/^manifest.*$/)) {
                defaultLog('替换manifest.json')
                //------id自己替换------
                if (isReturn) {
                  await replaceFile(
                    path,
                    /Aappid/g,
                    'Bappid'
                  )
                } else {
                  await replaceFile(
                    path,
                    /Bappid/g,
                    'Aappid'
                  )
                }
                resolve(true)
              }
            }
          })
        })
      }
    })
  })
}

// 打包 npm run build
const compileDist = async () => {
  defaultLog('开始编译')
  // 进入本地文件夹
  shell.cd(paths.resolve(process.cwd(), './'))
  // ------直接打包,不同自己替换------
  shell.exec('npm run build:mp-weixin')
  successLog('编译完成')
}
async function runTask() {
  await replaceAppid(false)
  await replaceManifestJsonAppid(false)
  await compileDist()
  await replaceAppid(true)
  await replaceManifestJsonAppid(true)
}

runTask()
// package.json配置命令,运行这个js

"a:build": "node autoBuild.js",

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值