uni-cli 编译和打包并自动打开微信开发者工具

需求:平时使用uni-cli开发,是为了获得vscode更好的提到提示以及其他的便捷工具以及提升效率;带有一个缺点,那便是 uni-cli 编译之后,你需要手动打开 微信开发者工具,找到项目下的 dist/dev/mp-weixin 或者 dist/build/mp-weixin。这可能需要花费你几秒中的时间,粗看没啥,细算就很浪费。特别是打完包,还要关闭之前的dev项目,找到build项目 发包;这有的还费 预计10秒  -- 因此,作为懒人的我,决定去偷个懒。

前期准备,可以通知打开两篇文章

uni-cli

小程序自动化

第一步,写脚本 

dev专用 openWeixin.js
const automator = require('miniprogram-automator')
const portfinder = require('portfinder') // 查找可用的端口号

portfinder.getPortPromise()
  .then(port => {
    automator
      .launch({
        projectPath: './dist/dev/mp-weixin',
        port: port,
      })
      .then(async (miniProgram) => {
        await miniProgram.reLaunch('/pages/index/index')
        // await page.waitFor(500)
        // await miniProgram.close()
      })
  })
  .catch(err => {
    console.log('Error finding available port: ', err)
  })
build 专用 openBuildWeixin.js
const automator = require('miniprogram-automator')
const portfinder = require('portfinder') // 查找可用的端口号

portfinder.getPortPromise()
  .then(port => {
    automator
      .launch({
        projectPath: './dist/build/mp-weixin',
        port: port,
      })
      .then(async (miniProgram) => {
        await miniProgram.reLaunch('/pages/index/index')
        // await page.waitFor(500)
        // await miniProgram.close()
      })
  })
  .catch(err => {
    console.log('Error finding available port: ', err)
  })

第二步,修改 package.json

重点看前面 4个 ,记得package.json和上面的两个文件夹在同一层级下

"scripts": {
    "dev": "npm-run-all --parallel dev:mp-weixin open --continue-on-error",
    "build": "npm-run-all --parallel build:mp-weixin open-build --continue-on-error",
    "open": "node openWeixin",
    "open-build": "node openBuildWeixin",
    "bootstrap": "pnpm install",
    "clean": "pnpm rimraf node_modules && pnpm rimraf dist",
    "dev:app": "uni -p app",
    "dev:custom": "uni -p",
    "dev:h5": "uni",
    "dev:h5:ssr": "uni --ssr",
    "dev:mp-alipay": "uni -p mp-alipay",
    "dev:mp-baidu": "uni -p mp-baidu",
    "dev:mp-kuaishou": "uni -p mp-kuaishou",
    "dev:mp-lark": "uni -p mp-lark",
    "dev:mp-qq": "uni -p mp-qq",
    "dev:mp-toutiao": "uni -p mp-toutiao",
    "dev:mp-weixin": "uni -p mp-weixin",
    "dev:quickapp-webview": "uni -p quickapp-webview",
    "dev:quickapp-webview-huawei": "uni -p quickapp-webview-huawei",
    "dev:quickapp-webview-union": "uni -p quickapp-webview-union",
    "build:app": "uni build -p app",
    "build:custom": "uni build -p",
    "build:h5": "uni build",
    "build:h5:ssr": "uni build --ssr",
    "build:mp-alipay": "uni build -p mp-alipay",
    "build:mp-baidu": "uni build -p mp-baidu",
    "build:mp-kuaishou": "uni build -p mp-kuaishou",
    "build:mp-lark": "uni build -p mp-lark",
    "build:mp-qq": "uni build -p mp-qq",
    "build:mp-toutiao": "uni build -p mp-toutiao",
    "build:mp-weixin": "uni build -p mp-weixin",
    "build:quickapp-webview": "uni build -p quickapp-webview",
    "build:quickapp-webview-huawei": "uni build -p quickapp-webview-huawei",
    "build:quickapp-webview-union": "uni build -p quickapp-webview-union",
    "lint:eslint": "eslint . --cache --max-warnings 0 --fix",
    "lint:prettier": "prettier --write  \"src/**/*.{js,json,ts,tsx,css,less,scss,vue,html,md}\"",
    "lint:stylelint": "stylelint --fix ",
    "prepare": "husky install",
    "test": "vitest",
    "test:ui": "vitest --ui",
    "test:coverage": "vitest run --coverage",
    "updatehooks": "git config core.hooksPath .git/hooks/ && rm -rf .git/hooks && npx simple-git-hooks"
  },

第三步,安装依赖

pnpm i miniprogram-automator -D
pnpm i portfinder -D
pnpm i npm-run-all -D

第四部,赠送两个脚本

statics.py

import os

# 静态文件目录路径列表
statics_dirs = ['static','packageActivity/static']

# 输出的文件名
output_filename = './enums/ImageEnum.ts'

# 获取当前工作目录
current_dir = os.getcwd()

# 输出文件的完整路径
output_file = os.path.join(current_dir, output_filename)

# 获取所有图片文件和SVG文件
image_files_by_directory = {}
svg_files_by_directory = {}

for statics_dir in statics_dirs:
    for root, dirs, files in os.walk(statics_dir):
        for file in files:
            file_path = os.path.join(root, file)
            if file.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')):
                directory_name = os.path.basename(root)
                if directory_name not in image_files_by_directory:
                    image_files_by_directory[directory_name] = []
                image_files_by_directory[directory_name].append(file_path)
            elif file.lower().endswith('.svg'):
                directory_name = os.path.basename(root)
                if directory_name not in svg_files_by_directory:
                    svg_files_by_directory[directory_name] = []
                svg_files_by_directory[directory_name].append(file_path)

# 生成内容
content = ''

# TypeScript 导出语句 - Images
content += '// TypeScript exports - Images\n\n'
content += 'export enum ImageEnum  {\n'

for directory_name, files in image_files_by_directory.items():
    content += f'\n\n\n\n  ///  {directory_name} ///\n\n'
    for file_path in files:
        file_name = os.path.splitext(os.path.basename(file_path))[0].upper().replace('-', '_')
        image_path = f'/{os.path.relpath(file_path, current_dir)}'
        content += f'  {file_name} = `{image_path}`, \n'

content += '};\n\n'

# TypeScript 导出语句 - SVGs
content += '// TypeScript exports - SVGs\n\n'
content += 'export enum SVGEnum  {\n'

for directory_name, files in svg_files_by_directory.items():
    content += f'\n\n\n\n  ///  {directory_name} ///\n\n'
    for file_path in files:
        file_name = os.path.splitext(os.path.basename(file_path))[0].upper().replace('-', '_')
        svg_path = f'/{os.path.relpath(file_path, current_dir)}'
        content += f'  {file_name} = `{svg_path}`, \n'

content += '};\n\n'

# 写入文件
with open(output_file, 'w') as f:
    f.write(content)

print(f'Successfully generated {output_file}')

pages.py

import json
# 输出的文件名
output_filename = './enums/pageEnum.ts'
# 读取 pages.json 文件
with open('pages.json', 'r', encoding='utf-8') as f:
    pages_config = json.load(f)

# 生成 TypeScript 导出语句
content = 'export enum PageEnum {\n'

content += f'\n\n  ///  主包 ///\n\n'

# 处理主包 pages
for page in pages_config['pages']:
    path = page['path']
    package_name = path.split('/')[0].upper()
    page_name = path.split('/')[-1].upper().replace('-', '_')

    
    
    title = page['style'].get('navigationBarTitleText', 'Untitled Page')
    content += f'  /**\n'
    content += f'   * @description {title} 页面\n'
    content += f'   */\n'
    content += f'  BASE_{page_name} = \'/{path}\',\n'

# 处理子包 subPackages
for sub_package in pages_config['subPackages']:
    root = sub_package['root']
    content += f'\n\n\n\n  ///  {root } 分包 ///\n\n'
    for page in sub_package['pages']:
        path = page['path']
        page_name = path.split('/')[-1].upper().replace('-', '_')
        title = page['style'].get('navigationBarTitleText', 'Untitled Page')
        package_name = root.upper().replace("-", "_")
        content += f'  /**\n'
        content += f'   * @description {package_name}-{title} 页面\n'
        content += f'   */\n'
        content += f'  {package_name}_{page_name.upper().replace("/", "_").replace("-", "_")} = \'/{root}/{path}\',\n'

content += '}\n'

# 写入文件
with open(output_filename, 'w', encoding='utf-8') as f:
    f.write(content)

print(f'Successfully generated {output_filename}')



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值