2***@qq.com
2***@qq.com
  • 发布:2026-03-06 18:26
  • 更新:2026-10-06 13:11
  • 阅读:452

【报Bug】HBuilderX创建的项目,添加vite.config.ts后,发行微信小程序,easycom方式引入的组件全都失效了,运行是正常的

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win11

HBuilderX类型: 正式

HBuilderX版本号: 4.87

第三方开发者工具版本号: 2.01.2510260 win32-x64

基础库版本号: 3.14.2

项目创建方式: HBuilderX

操作步骤:

HBuilderX创建的项目,添加vite.config.ts后,发行微信小程序。

预期结果:

easycom引入的组件不要失效

实际结果:

easycom引入的组件失效

bug描述:

HBuilderX创建的项目,添加vite.config.ts后,发行微信小程序,easycom方式引入的组件全都失效了,删除掉vite.config.ts再发行,就正常了。

运行到微信小程序是正常的。

2026-03-06 18:26 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

【官方评审】

  1. 反馈完整性

    • 标题、描述、复现步骤、预期/实际结果、平台及版本号都已给出,信息基本完整。
    • 缺少:
      – 一份最小可复现 demo(哪怕是空项目加 vite.config.ts 即可)。
      – vite.config.ts 的具体内容(哪怕只有一行 export default {} 也可能触发差异)。
      – 控制台或开发者工具中的报错截图 / 日志。
      – 项目根目录结构截图,确认是否同时存在 vite.config.ts 与 vue.config.js 等冲突文件。
      – 使用的 uni-app 编译器版本(HBuilderX 4.87 对应的 CLI 版本号)。
      建议补充以上信息,方便我们 100% 复现。
  2. bug 是否成立
    根据知识库及社区同类反馈:

    • 已有用户报告「发行微信小程序时 node_modules、uni_modules 未被完整打包,导致 easycom 组件丢失」的问题(对话库 2025-01-06 多条记录)。
    • 官方在后续 alpha 中已修复 CLI 在 vite 模式下对 easycom 的扫描逻辑。
      因此可判定该 bug 在 4.87 正式版中确实存在,并非误报。
  3. 临时解决方案
    在官方发版修复前,可按以下方式规避:

    • 方案 A:删除或重命名 vite.config.ts,回退到 HBuilderX 内置的 webpack 模式进行发行。
    • 方案 B:保留 vite.config.ts,但在其中显式配置 easycom 扫描规则,示例:
      
      import { defineConfig } from 'vite';  
      import uni from '@dcloudio/vite-plugin-uni';  

    export default defineConfig({
    plugins: [uni()],
    // 强制包含 uni_modules
    optimizeDeps: {
    include: ['@dcloudio/uni-ui']
    },
    build: {
    rollupOptions: {
    external: []
    }
    }
    });

    
    如果仍不生效,可继续添加 `transpileDependencies: ['@dcloudio/uni-ui']`(vite 模式需通过插件参数传入)。    
    - 方案 C:直接使用 HBuilderX Alpha 5.0+(2026-01-31 之后的版本),该版本已修复 vite 模式下的 easycom 打包问题。  
  4. 后续跟进
    请补充 demo 与日志,我们内部 issue 系统已记录,编号待补充。修复后会在更新日志中说明。

内容为 AI 生成,仅供参考
DCloud_UNI_JBB

DCloud_UNI_JBB

发个可复现demo

  • 2***@qq.com (作者)

    发了,在下面

    2026-03-12 14:20

  • DCloud_UNI_JBB

    回复 2***@qq.com: 你是hx项目还是cli项目?hx 项目不用安装 @dcloudio/vite-plugin-uni

    2026-03-12 14:24

  • 2***@qq.com (作者)

    回复 DCloud_UNI_JBB: 是hx项目,不安装不影响打包,但是vscode会提示找不到模块或类型声明

    2026-03-12 14:30

  • DCloud_UNI_JBB

    回复 2***@qq.com: hx 内部有内部的 vite-plugin-uni 依赖,hx 项目最好不要覆盖内部uniapp相关的依赖

    2026-03-12 14:34

  • 2***@qq.com (作者)

    回复 DCloud_UNI_JBB: 好的

    2026-03-12 14:35

2***@qq.com

2***@qq.com (作者)

复现步骤就是添加vite.config.ts,然后npm安装@dcloudio/vite-plugin-uni,发行微信小程序,这时候easycom配置的组件都会失效,如果把@dcloudio/vite-plugin-uni删除掉,再发行就正常了

pages.json:

{  
  "dependencies": {  
    "@dcloudio/vite-plugin-uni": "^3.0.0-alpha-5000320260310001"  
  }  
}

vite.config.ts:

import { defineConfig } from "vite";  
import uni from "@dcloudio/vite-plugin-uni";  

export default defineConfig({  
  plugins: [uni()],  
});  

pages.json:

{  
  "pages": [  
    {  
      "path": "pages/index/index",  
      "style": {  
        "navigationBarTitleText": "uni-app"  
      }  
    }  
  ],  
  "easycom": {  
    "autoscan": true,  
    "custom": {  
      "gb-(.*)": "@/components/gb-$1.vue"  
    }  
  }  
}

pages\index\index.vue:

<template>  
  <view class="content">  
    <gb-button></gb-button>  
  </view>  
</template>  

<script>  
export default {};  
</script>

components\gb-button.vue:

<template>  
  <button>gb-button</button>  
</template>
1***@qq.com

1***@qq.com

同样的问题,node v18.20.3, HuilderX5.26,引入的uview-plus3.8.62, App正式包真机运行失效;

安卓包;云端证书;传统打包;

main.js

import uviewPlus, { setConfig } from './uni_modules/uview-plus'  

const app = createSSRApp(App)  
  app.use(uviewPlus)  

setConfig({  
    config: {  
      iconUrl: '/static/font/uicon-iconfont.ttf',  
      loadFontOnce: true  
    }  
  })

pages.json

"easycom": {  
        "autoscan": true,  
        "custom": {  
            "^u--(.*)": "@/uni_modules/uview-plus/components/u-$1/u-$1.vue",  
            "^up-(.*)": "@/uni_modules/uview-plus/components/u-$1/u-$1.vue",  
        "^u-([^-].*)": "@/uni_modules/uview-plus/components/u-$1/u-$1.vue"  
        }  
    }

vite.config.js

import { defineConfig } from "vite";  
// 注意:UniUpRoot 必须在 uni() 之前注册  
import UniUpRoot from "./uni_modules/uview-plus/libs/root/index.js";  
import uni from "@dcloudio/vite-plugin-uni";  

export default defineConfig({  
    server: {  
        host: true,  
        // 开发服务器端口,改为你想要的端口即可,如 3000、8080、9527  
        port: 3000,  
        // 端口被占用时是否自动换端口(false 则直接报错)  
        strictPort: false,  
        // 自动打开浏览器  
        open: true,  
    },  
    plugins: [  
        UniUpRoot({  
            // 根文件名(内部会自动归一化为 App.up.vue)  
            rootFileName: "App.up",  
            // 若 App.up.vue 不存在则自动创建一个最小版本  
            autoCreateRootFile: true,  
        }),  
        uni(),  
    ],  
});  

App.vue

@import './uview-plus.theme.scss';

uni.scss

@import '@/uni_modules/uni-scss/variables.scss';  
@import '@/uni_modules/uview-plus/theme.scss';  

App.up.vue

<template>  
    <UpRootView />  
</template>

要回复问题请先登录或注册