p***@gmail.com
p***@gmail.com
  • 发布:2025-11-07 15:29
  • 更新:2025-11-07 17:34
  • 阅读:38

uniapp 微信小程序分包组件使用

分类:uni-app

uniapp 目前仅支持在主包或分包页面引用分包内组件, 只需要在 vue 文件 import 并配置 components, 同时在 pages.json 文件中配置相应的 componentHolder, 详见 跨分包自定义组件引用

也就是说, uniapp 只支持页面级别的分包组件使用, 不支持组件级别的分包组件使用, 当然主包 components 组件可被任意 vue 文件使用

现在有这样的场景: 有一个 example-component.vue 组件, 位于某分包 subA 内, 现在在主包或非分包 subA 的分包 (如 subB) 组件内需要使用 example-component 组件

解决方案:

  1. 使用 hbuilder 运行到微信小程序, 在项目路径 unpackage/dist/dev/mp-weixin/ 下对相应的主包或分包组件添加 componentHolder 属性, 其形式如下:
    {  
      "component": true,  
      "usingComponents": {  
          "multi-column-picker": "/otherPages/components/multi-column-picker"  
      },  
      "componentPlaceholder": {  
          "multi-column-picker": "view"  
      }  
    }  
  2. 社区已有插件 @uni_toolkit/webpack-plugin-component-config, 可解决此问题, 但其要求的 node 版本较高, 且会对源文件进行侵入, 不过胜在思路和代码, 可供参考
  3. 自行实现相应的插件去处理 componentHolder, 如 vue2 项目在根目录下配置 vue.config.js 文件, vue3 项目在根目录下配置 vite.config.ts 文件, 注意如果无此文件, 可手动创建文件并参考相关文档配置 webpackvite 插件。本人已实现该插件, 在项目根目录添加配置文件 component-placeholder-config.json 文件以配置 componentPlaceholder, 如有人需要, 可私信或添加微信 why511686 付费获取, 插件基本功能完善, 易于使用和二次开发, 代码严谨、各种边界情况均有考虑
  4. 不知道高版本 hbuilder/uniapp 是否已支持组件级的跨分包组件引用?
2025-11-07 15:29 负责人:无 分享
已邀请:
DCloud_UNI_JBB

DCloud_UNI_JBB

我写过一个更简单的 vite 插件 https://github.com/chouchouji/vite-plugin-component-placeholder,可以根据这个思路再开发一个webpack版本的插件。

开发 @uni_toolkit/webpack-plugin-component-config 是我当时想到除了 componentPlaceholder ,还可能需要加些其他的配置,于是就做了这个插件,有侵入,但是定制化程序很高,可自由控制 json 文件产物

  • p***@gmail.com (作者)

    大佬 上面提到的插件也是你们写的 但是 node 版本要求太高了 能不能考虑出一个 build.min.js 文件 这样可以直接复制这个压缩后的js文件被 webpack 或 vite 使用? 我们这小程序 node 是 12.几的 升级不动 所以后续参考思路自己 本地写了个js插件...

    2025-11-07 17:13

  • p***@gmail.com (作者)

    补充下 我这样的 component-placeholder-config.json 文件大概长这样:

    {

    "components/screen/screen": {

    "componentPlaceholder": {

    "multi-column-picker": "view"

    }

    },

    "crmPages/components/cap-mulchoose/cap-mulchoose": {

    "componentPlaceholder": {

    "multi-column-picker": "view"

    }

    }

    }

    其实这种方式更友好一些 可以从全局角度去看 在开发时就需要注意到这种问题 有意识的做相应配置 而vue文件里就正常引用分包组件即可 而且不侵入 vue 源文件, 如果需要styleIsolations 等配置 也可以在这里添加 只是插件再做相应支持即可

    2025-11-07 17:16

  • DCloud_UNI_JBB

    回复 p***@gmail.com: 那个插件就是我写的

    2025-11-07 17:28

  • DCloud_UNI_JBB

    回复 p***@gmail.com: 你的思路我明白,各有各的好吧,满足自己的需求就行

    2025-11-07 17:29

DCloud_UNI_JBB

DCloud_UNI_JBB

cli项目的话,componentPlaceholder 这里用node写脚本,用shell写脚本都没啥问题,有node版本限制,可以考虑写shell脚本

如果是hx项目,相对来说没那么容易去做产物构建完的文件处理,还是要写webpack插件或者vite插件

要回复问题请先登录注册