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

Vite构建应用时如何排除指定JS脚本使其不被打包处理

问题背景

由于另一已知问题,我需要在Vue3应用的HTML文件中静态引入一个JS依赖。

/index.html中引入代码如下:

<head>
    <!-- 其余头部配置 -->
    <script type="module" src="node_modules/@telekom/scale-components-neutral/dist/scale-components/scale-components.esm.js"></script>
</head>

因为Vite无法正常打包该依赖,我希望构建流程直接忽略这个依赖,生产构建产物根目录下的index.html保留这段JS模块的原始引入语句,不对其做打包处理。

我最初尝试在optimizeDeps.exclude配置项中添加各类匹配规则,但Vite仍然会尝试分析并预打包该依赖。

vite.config.ts配置尝试如下:

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'
    ],
  },
  // 其余配置
});

所有配置尝试均无效,执行npm run build后,dist/index.html中对应的引入语句都会被移除,我想了解optimizeDeps.exclude配置的正确匹配规则是什么?


补充说明1

根据Vite官方文档中的说明:

依赖预打包仅在开发模式下生效,该过程使用esbuild将依赖转换为ESM格式;生产构建时会使用@rollup/plugin-commonjs处理依赖。

基于该说明,我尝试配置build.commonjsOptions.exclude项。

vite.config.js配置尝试如下:

export default defineConfig({
  build: {
    commonjsOptions: {
      exclude: [
        'scale-components-neutral',
        'node_modules/@telekom/scale-components-neutral',
        'node_modules/@telekom/scale-components-neutral/**/*',
        'node_modules/@telekom/scale-components-neutral/**/*.js',
        '/node_modules/@telekom/scale-components-neutral',
        '/node_modules/@telekom/scale-components-neutral/**/*',
        '/node_modules/@telekom/scale-components-neutral/**/*.js',
        '**/node_modules/@telekom/scale-components-neutral',
        '**/node_modules/@telekom/scale-components-neutral/**/*',
        '**/node_modules/@telekom/scale-components-neutral/**/*.js',
        '@telekom/scale-components-neutral',
        '@telekom/scale-components-neutral/**/*',
        '@telekom/scale-components-neutral/**/*.js',
        '**/node_modules/@telekom/scale-components-neutral/dist/scale-components/scale-components.esm.js',
      ],
    },
  },
  // 其余配置

该方案仍然无效,dist/index.html中的引入语句依旧会被移除。


补充说明2

我后续尝试配置build.rollupOptions.external与build.dynamicImportVarsOptions.exclude(因初始问题与动态导入相关,这两个配置项看起来符合需求),但依然没有解决问题:该JS依赖仍然被错误打包,本地开发环境运行正常,但执行npm run build构建部署后的应用无法正常运行。


内容的提问来源于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 23:57:20