open-dev-tools.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { exec } from 'node:child_process'
  2. import fs from 'node:fs'
  3. import path from 'node:path'
  4. import process from 'node:process'
  5. import dotenv from 'dotenv'
  6. dotenv.config({ path: path.resolve(process.cwd(), 'env/.env') })
  7. /**
  8. * 打开开发者工具
  9. */
  10. function _openDevTools() {
  11. const platform = process.platform // darwin, win32, linux
  12. const { UNI_PLATFORM, NODE_ENV } = process.env // mp-weixin, mp-alipay
  13. const uniPlatformText = UNI_PLATFORM === 'mp-weixin' ? '微信小程序' : UNI_PLATFORM === 'mp-alipay' ? '支付宝小程序' : '小程序'
  14. const outputDir = NODE_ENV === 'development' ? 'dev' : 'build'
  15. // 项目路径(构建输出目录)
  16. const projectPath = path.resolve(process.cwd(), `dist/${outputDir}/${UNI_PLATFORM}`)
  17. // 检查构建输出目录是否存在
  18. if (!fs.existsSync(projectPath)) {
  19. console.log(`❌ ${uniPlatformText}构建目录不存在:`, projectPath)
  20. return
  21. }
  22. console.log(`🚀 正在打开${uniPlatformText}开发者工具...`)
  23. // 根据不同操作系统执行不同命令
  24. let command = ''
  25. if (platform === 'darwin') {
  26. // macOS
  27. if (UNI_PLATFORM === 'mp-weixin') {
  28. command = `/Applications/wechatwebdevtools.app/Contents/MacOS/cli -o --project "${projectPath}"`
  29. }
  30. else if (UNI_PLATFORM === 'mp-alipay') {
  31. command = `/Applications/小程序开发者工具.app/Contents/MacOS/小程序开发者工具 --p "${projectPath}"`
  32. }
  33. }
  34. else if (platform === 'win32' || platform === 'win64') {
  35. // Windows
  36. if (UNI_PLATFORM === 'mp-weixin') {
  37. let wechatDevToolPath = 'C:\\Program Files (x86)\\Tencent\\微信web开发者工具'
  38. // 获取微信开发者工具路径,添加默认值或错误处理
  39. if (process.env.VITE_WECHAT_DEV_TOOL_PROJECT_PATH_ENABLE === 'true') {
  40. wechatDevToolPath = process.env.VITE_WECHAT_DEV_TOOL_PROJECT_PATH
  41. }
  42. if (process.env.VITE_WECHAT_DEV_TOOL_PROJECT_PATH_ENABLE === 'true' && !wechatDevToolPath) {
  43. console.log('❌ 未配置微信开发者工具路径,请在 .env 文件中设置 VITE_WECHAT_DEV_TOOL_PROJECT_PATH')
  44. return
  45. }
  46. console.log("🚀 项目输出路径:", projectPath)
  47. const cliPath = path.join(wechatDevToolPath, 'cli.bat')
  48. command = `${cliPath} open --project "${projectPath}"`
  49. }
  50. }
  51. else {
  52. // Linux 或其他系统
  53. console.log('❌ 当前系统不支持自动打开微信开发者工具')
  54. return
  55. }
  56. exec(command, (error, stdout, stderr) => {
  57. if (error) {
  58. console.log(`❌ 打开${uniPlatformText}开发者工具失败:`, error.message)
  59. console.log(`💡 请确保${uniPlatformText}开发者工具服务端口已启用`)
  60. console.log(`💡 可以手动打开${uniPlatformText}开发者工具并导入项目:`, projectPath)
  61. return
  62. }
  63. if (stderr) {
  64. console.log('⚠️ 警告:', stderr)
  65. }
  66. console.log(`✅ ${uniPlatformText}开发者工具已打开`)
  67. if (stdout) {
  68. console.log(stdout)
  69. }
  70. })
  71. }
  72. export default function openDevTools() {
  73. // 首次构建标记
  74. let isFirstBuild = true
  75. return {
  76. name: 'uni-devtools',
  77. writeBundle() {
  78. if (isFirstBuild && process.env.UNI_PLATFORM?.includes('mp')) {
  79. isFirstBuild = false
  80. _openDevTools()
  81. }
  82. },
  83. }
  84. }