unh

二次封装的启动命令,可以自定义hooks

安装

npm
pnpm
bun
yarn
npm i @uni-helper/unh

为什么需要 @uni-helper/unh

@uni-helper/unh 是对 uni-app 启动命令的二次封装,旨在解决开发过程中的特定问题。在标准的 uni-app 工作流中,启动命令会使用 fs 模块检查 pages.jsonmanifest.json 文件是否存在,若缺少这些文件将导致命令中断。

当使用 vite-plugin-uni-pagesvite-plugin-uni-manifest 等插件时,这些配置文件通常在构建过程中动态生成,而非预先存在。这种时序差异会导致启动命令失败,因为文件检查发生在文件生成之前。

@uni-helper/unh 通过引入自定义 hooks 机制,在执行实际启动命令前预先生成必要的配置文件,确保了开发流程的顺畅性。这种设计不仅解决了文件依赖问题,还为开发者提供了在项目启动前后执行自定义逻辑的灵活性。

@uni-helper/unh 还提供了平台别名功能,允许开发者在 unh.config.ts 中为不同平台配置简短别名。这一特性不仅简化了命令行操作,也优化了 package.jsonscripts 部分的配置,提升了开发效率和项目可维护性。

使用

更新 package.json

package.json
{
  "scripts": {
    "dev": "unh dev",
    "build": "unh build",
    "prepare": "unh prepare"
  }
}

配置 unh.config.ts

unh.config.ts
import { defineConfig } from '@uni-helper/unh'

export default defineConfig({
  // 平台配置
  platform: {
    // 默认平台,当不指定平台时使用此平台
    default: 'h5',
    // 平台别名,可以使用短名称代替完整平台名称
    alias: {
      'h5': ['w', 'h'],
      'mp-weixin': ['wx'],
    },
  },
  // 准备阶段配置,可以自定义hooks
  hooks: {
    // 安装依赖时的钩子
    prepare() {
      console.log('prepare')
    },
    // 构建时的钩子,接收平台参数
    build(platform: string) {
      console.log('build:', platform)
    },
    // 开发时的钩子,接收平台参数
    dev(platform: string) {
      console.log('dev:', platform)
    },
  },
  // 自动生成配置
  autoGenerate: {
    // 是否自动生成页面配置
    pages: true,
    manifest: true,
  },
})

调用

npm
pnpm
bun
yarn
npm run dev wx

获取帮助

执行以下命令可以查看所有可用的命令和选项:

terminal
unh -h

配置说明

platform

defaultPlatform
'h5'
默认平台,当未指定平台时使用该平台
aliasPlatformAlias
平台别名,用于自定义配置不同平台的别名

hooks

prepare() => void | Promise<void>
安装依赖时执行,执行unh prepare时调用
build(inputPlatform: string) => void | Promise<void>
构建前执行,执行unh build时调用
dev(inputPlatform: string) => void | Promise<void>
开发前执行,执行unh dev时调用

autoGenerate

outDirstring
'src'
自动生成的文件输出目录
pagesboolean | BuildPhase[]
false
是否自动生成pages.json
  • true 均自动生成 pages.json
  • BuildPhase[] 指定在哪些阶段生成,如 ['build', 'dev']
manifestboolean | ManifestOptions & { commands?: BuildPhase[] }
false
是否自动生成manifest.json
  • true 均自动生成 manifest.json
  • 对象形式可配置更多选项

ManifestOptions

minifyboolean
false
是否压缩 manifest.json
insertFinalNewlineboolean
false
是否在 manifest.json 末尾插入换行符
commandsBuildPhase[]
指定在哪些命令阶段生成 manifest.json

ui

enabledboolean
false
是否启用终端UI,测试功能,谨慎使用
platformsPlatforms
用于指定终端UI显示的平台