DCloud_UNI_JBB
DCloud_UNI_JBB
  • 发布:2025-09-25 19:37
  • 更新:2025-10-29 16:46
  • 阅读:677

微信、支付宝、抖音等小程序支持自定义 componentPlaceholder

分类:uni-app

背景

微信小程序支持 跨分包自定义组件引用,但是 uniapp 目前只支持在 pages.json 下的页面中配置 componentPlaceholder, 并不支持在某个具体的组件中添加此配置。

可以通过这个 插件 来解决此问题,支持 cli项目 和 hx项目

Vue3

安装

npm install @uni_toolkit/vite-plugin-component-config -D  
# 或  
pnpm add @uni_toolkit/vite-plugin-component-config -D  
# 或  
yarn add @uni_toolkit/vite-plugin-component-config -D

使用方法

配置 vite.config.js

// vite.config.js  
import { defineConfig } from 'vite'  
import uni from '@dcloudio/vite-plugin-uni'  
import componentConfig from '@uni_toolkit/vite-plugin-component-config'  

export default defineConfig({  
  plugins: [  
    componentConfig(), // 在 uni 插件之前调用  
    uni(),  
  ]  
})

修改 Vue 文件

<template>  
  <view class="container">  
    <text>Hello World</text>  
  </view>  
</template>  

<script>  
export default {  
  name: 'MyComponent'  
}  
</script>  

// #ifdef MP  
<component-config>  
// 此处必须是标准的 json 对象,支持条件编译  
{  
  "usingComponents": {  
    "custom-button": "/components/custom-button"  
  },  
  "styleIsolation": "apply-shared",  
  "componentPlaceholder": {    
    "test": "view",    
  }    
}  
</component-config>  
// #endif

Vue2

安装

npm install @uni_toolkit/webpack-plugin-component-config -D  
# 或  
pnpm add @uni_toolkit/webpack-plugin-component-config -D  
# 或  
yarn add @uni_toolkit/webpack-plugin-component-config -D

使用方法

配置 vue.config.js

const WebpackComponentConfigPlugin = require('@uni_toolkit/webpack-plugin-component-config').default;  

module.exports = {  
  configureWebpack: {  
    plugins: [  
      new WebpackComponentConfigPlugin()  
    ]  
  }  
};

修改 Vue 文件

<template>  
  <view class="container">  
    <text>Hello World</text>  
  </view>  
</template>  

<script>  
export default {  
  name: 'MyComponent'  
}  
</script>  

// #ifdef MP  
<component-config>  
// 此处必须是标准的 json 对象,支持条件编译  
{  
  "usingComponents": {  
    "custom-button": "/components/custom-button"  
  },  
  "styleIsolation": "apply-shared",  
  "componentPlaceholder": {    
    "test": "view",    
  }    
}  
</component-config>  
// #endif
2 关注 分享
7***@qq.com julytian

要回复文章请先登录注册

DCloud_UNI_JBB

DCloud_UNI_JBB (作者)

回复 z***@126.com :
好的
2025-10-29 16:46
z***@126.com

z***@126.com

回复 DCloud_UNI_JBB :
解决了,今天下午和你私信过了
2025-10-29 16:43
DCloud_UNI_JBB

DCloud_UNI_JBB (作者)

回复 z***@126.com :
你是怎么使用的?这里不好发代码的话可以在im里私聊我
2025-10-29 14:03
z***@126.com

z***@126.com

unipp vue2 报错,怎么解决
ERROR Error [ERR_REQUIRE_ESM]: require() of ES Module E:\java\wxappLcapRihi\node_modules\lodash-es\lodash.js from E:\java\wxappLcapRihi\node_modules\@uni_toolkit\webpack-plugin-component-config\dist\index.cjs not supported.
Instead change the require of lodash.js in E:\java\wxappLcapRihi\node_modules\@uni_toolkit\webpack-plugin-component-config\dist\index.cjs to a dynamic import() which is available in all CommonJS modules.
2025-10-29 12:27
DCloud_UNI_JBB

DCloud_UNI_JBB (作者)

回复 1***@qq.com :
用这个 https://github.com/chouchouji/vite-plugin-component-placeholder
2025-10-28 10:37
1***@qq.com

1***@qq.com

请问现在还支持在<script setup>里使用defineOptions吗
2025-10-28 09:20
DCloud_UNI_JBB

DCloud_UNI_JBB (作者)

回复 7***@qq.com :
升级到 0.0.3 试试还有没有问题
2025-10-13 11:02
DCloud_UNI_JBB

DCloud_UNI_JBB (作者)

回复 7***@qq.com :
你可以先临时修改node-modules下面的那个包,找到dist下的index.cjs文件,搜索Object.assign,那里就是合并json的地方,可以修改一下默认覆盖这个策略。也欢迎到我的github仓库提个pr
2025-10-12 10:32
DCloud_UNI_JBB

DCloud_UNI_JBB (作者)

回复 7***@qq.com :
应该是bug,我今天修复一下
2025-10-12 10:19
7***@qq.com

7***@qq.com

回复 DCloud_UNI_JBB :
可以用,非常感谢。我发现usingComponents好像会把原来引用的组件覆盖,需要删除usingComponents或者在usingComponents中重新声明原来引用的组件,这是正常的吗?
2025-10-12 09:51