You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3+Vite环境无法加载Stencil构建的Web组件库问题求助

Vue3 + Vite 引入 Stencil 构建 Web 组件库加载报错问题

复现准备

  • 创建了示例项目用于复现问题,仓库地址:https://github.com/splanard/vue3-vite-web-components
  • 按照官方文档推荐方式,通过 npm init vue@latest 初始化Vue3项目
  • 安装基于Stencil构建的Web组件库Scale(组件库文档地址:https://telekom.github.io/scale/?path=/docs/scale-design-system--page,公司内部设计系统存在完全相同问题,因此选用该公开Stencil组件库复现问题)

已完成配置

main.ts 配置

在入口文件中引入组件样式与加载器,配置自定义元素识别规则:

import '@telekom/scale-components-neutral/dist/scale-components/scale-components.css';
import { applyPolyfills, defineCustomElements } from '@telekom/scale-components-neutral/loader';

const app = createApp(App);
app.config.compilerOptions.isCustomElement = (tag) => tag.startsWith('scale-')

applyPolyfills().then(() => {
  defineCustomElements(window);
});

vite.config.js 配置

在Vite配置中同步添加自定义元素识别规则:

export default defineConfig({
  plugins: [vue({
    template: {
      compilerOptions: {
        isCustomElement: (tag) => tag.startsWith('scale-')
      }
    }
  })]
  // 其余配置省略
})

报错现象

在视图文件 TestView.vue 中插入简单的Scale按钮组件,执行 npm run dev 启动项目。打开路由为 /test 的组件测试页面时,浏览器控制台抛出如下报错:

failed to load module "http://localhost:3000/node_modules/.vite/deps/scale-button_14.entry.js?import" because of disallowed MIME type " "

Scale组件库和公司内部设计系统均存在该问题,可确认该问题能在任意基于Stencil构建的组件库上复现。


初步排查结论

node_modules/.vite 是Vite依赖预构建功能的文件系统缓存目录,经检查,浏览器加载失败的 scale-button_14.entry.js 脚本根本不存在于 node_modules/.vite/deps 目录下。初步推测问题和Vite的「依赖预构建」特性有关:该机制可能存在限制,无法识别组件库loader动态加载的组件资源。


已知信息与临时方案

查询Stencil仓库相关issue(地址:https://github.com/ionic-team/stencil/issues/2827)发现,已有开发者反馈动态导入无法在Vite这类现代构建工具中正常工作。该issue已关闭,Stencil 2.16.0版本已修复该问题,可后续跟进验证。

当前可用的临时解决方案是放弃组件懒加载,直接在HTML模板中通过传统script标签一次性加载所有组件,代码如下:

<link rel="stylesheet" href="node_modules/@telekom/scale-components/dist/scale-components/scale-components.css">
<script type="module" src="node_modules/@telekom/scale-components/dist/scale-components/scale-components.esm.js"></script>

现存配置问题

尝试在 vite.config.js 中配置 optimizeDeps.exclude 项,让Vite预构建功能忽略Stencil组件库相关导入,但执行 npm run dev 时Vite仍然输出大量相关警告,尝试的配置如下:

export default defineConfig({
  optimizeDeps: {
    exclude: [
      // 尝试了多种匹配规则,均无法让Vite预构建跳过该依赖
      'scale-components-neutral',
      '@telekom/scale-components-neutral',
      '@telekom/scale-components-neutral/**/*',
      '@telekom/scale-components-neutral/**/*.js',
      'node_modules/@telekom/scale-components-neutral/**/*.js'
    ],
  },
  // 其余配置省略
});

问题诉求

如何彻底解决该问题,怎样正确配置Vite才能让其跳过Stencil组件库的依赖预构建?


内容的提问来源于stack exchange,提问作者Eria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 05:09:31