@import"yn-button";1.“共享组件没有直接打包到代码中”是什么意思?比如你写一个组件库,有3个组件:Button、Dialog、MessageBox。其中Dialog和MessageBox组件都引用了Button组件,所以Button组件是共享组件。将这三个组件一一打包后,查看打包后的Dialog和MessageBox组件的产品代码,会发现Dialog和MessageBox组件都包含了Button组件的产品代码,这样产品体积就变大了。有什么办法可以让打包后的Dialog和MessageBox组件产品不包含Button组件产品代码?答案是肯定的。比如ant-design-vue和element-ui的打包产品代码中就没有共享组件代码。它们通过import或require加载共享组件。如ant-design-vue打包产品代码:2.如何实现?这个问题也困扰了我很久,直到用esbuild打包我的【vue3bootstrap图标组件库】才解决这个问题。原理很简单:将共享组件作为外部扩展(Externals),通常在打包时将vue设置为外部扩展,那么共享组件为什么不能设置为外部扩展呢?将共享组件设置为外部扩展后,webpack或其他打包工具不会将其打包到产品中,而是以import或require的形式加载。看到这里你应该开悟了!您将编写下一个代码。3、代码实现(vue3)我这里以esbuild打包为例,webpack或者vite的代码类似。首先,需要安装2个关键依赖:npmiesbuildesbuild-plugin-vue-D接下来,安装esbuild并将其打包成依赖:npmiesbuild-plugin-progress-D安装css处理依赖:npmipostcssesbuild-sass-pluginautoprefixerpostcss-preset-envpostcss-import-D目录结构:-my-project+node_modules-src-componentsyn-button.scssYnButton.vueYnDialog.vueYnMessageBox.vueApp.vuemain.jsbuild-lib。jspackage.jsonyn-button.scss.yn-button{transition:all.3s;}YnButton.vue<插槽>@import"yn-button";YnDialog.vue{{title}}插槽>