copy-native-resources.ts 是一个专为 基于unibest框架的UniApp 项目设计的 Vite 插件,用于解决使用原生插件时打包后出现"插件找不到"的问题。该插件会在构建过程中自动将本地原生插件资源复制到正确的目标目录。
根据 UniApp 官方文档,本地原生插件应存储在项目根目录的 nativeplugins 目录下:
项目根目录/
├── nativeplugins/ # 原生插件存储目录(官方规范)
│ ├── HL-HHWUHFController/ # 示例:RFID 控制器插件
│ │ ├── android/ # Android 平台资源
│ │ │ ├── libs/ # Android 库文件
│ │ │ └── res/ # Android 资源文件
│ │ ├── ios/ # iOS 平台资源(如果有)
│ │ └── package.json # 插件配置文件
│ └── 其他原生插件/
├── src/
├── vite-plugins/
│ ├── copy-native-resources.ts # 本插件文件
│ └── README.md # 本文档
└── vite.config.ts
在 env/.env 文件中添加以下配置:
# 是否启用原生插件资源复制
VITE_COPY_NATIVE_RES_ENABLE = true
在 vite.config.ts 中引入并使用插件:
import { createCopyNativeResourcesPlugin } from './vite-plugins/copy-native-resources'
export default defineConfig({
plugins: [
// 其他插件...
// 原生插件资源复制插件
createCopyNativeResourcesPlugin(
UNI_PLATFORM === 'app' && VITE_COPY_NATIVE_RES_ENABLE === 'true',
{
verbose: mode === 'development', // 开发模式显示详细日志
},
),
// 其他插件...
],
})
在 manifest.config.ts 中配置原生插件:
export default defineManifest({
// 其他配置...
'app-plus': {
// 其他配置...
// 原生插件配置
nativePlugins: {
// RFID 控制器插件示例
'HL-HHWUHFController': {
__plugin_info__: {
name: 'HL-HHWUHFController',
description: 'RFID UHF 控制器插件',
platforms: 'Android',
url: '',
android_package_name: '',
ios_bundle_id: '',
isCloud: false,
bought: -1,
pid: '',
parameters: {}
}
}
}
}
})
interface CopyNativeResourcesOptions {
/** 是否启用插件 */
enable?: boolean
/**
* 源目录路径,相对于项目根目录
* 默认为 'nativeplugins',符合 UniApp 官方规范
*/
sourceDir?: string
/**
* 目标目录名称,构建后在 dist 目录中的文件夹名
* 默认为 'nativeplugins',与源目录保持一致
*/
targetDirName?: string
/** 是否显示详细日志 */
verbose?: boolean
}
// 使用默认配置
createCopyNativeResourcesPlugin(true)
// 自定义配置
createCopyNativeResourcesPlugin(true, {
sourceDir: 'nativeplugins', // 源目录
targetDirName: 'nativeplugins', // 目标目录名
verbose: true // 显示详细日志
})
// 仅在 app 平台且环境变量启用时生效
createCopyNativeResourcesPlugin(
UNI_PLATFORM === 'app' && VITE_COPY_NATIVE_RES_ENABLE === 'true',
{ verbose: mode === 'development' }
)
writeBundle 阶段执行nativeplugins 是否存在nativeplugins 目录复制到构建输出目录插件会将原生插件资源复制到以下位置:
dist/
├── build/
│ └── app/
│ └── nativeplugins/ # 生产环境构建
│ └── HL-HHWUHFController/
└── dev/
└── app/
└── nativeplugins/ # 开发环境构建
└── HL-HHWUHFController/
A: 目前使用unibest框架在打包时可能不会自动复制原生插件资源,导致运行时出现"插件找不到"的错误。此插件确保原生插件资源被正确复制到构建目录。
A: 检查以下几点:
nativeplugins 目录存在且包含插件文件VITE_COPY_NATIVE_RES_ENABLE 设置为 trueapp(插件仅在 app 平台生效)verbose: true 查看详细日志A: 可以,但不推荐。UniApp 官方规范要求使用 nativeplugins 目录,自定义可能导致其他问题。
A: 插件本身支持所有平台,但通常只在 app 平台(目前只测试了Android环境,iOS有条件的伙伴可以测试后反馈)使用原生插件。
A: 有伙伴反馈过接入的原生插件之前使用【Lastly1999】提交的版本初步解决了问题,但是又遇到两个新的问题:
nativeplugins 目录结构如果在使用过程中遇到问题,请检查: