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

Vite配置外部依赖后相对路径异常问题求助

解决Vite打包外部依赖脚本路径丢失前缀的问题

问题根源

Rollup的external配置仅标记模块为外部依赖,但默认会提取模块的文件名作为最终引入路径,不会保留完整的目录前缀,导致你期望的Basis_24.2.0.0/js/部分被截断。

修复步骤

1. 配置Rollup路径映射

修改Vite配置中的rollupOptions.output.paths,为外部依赖指定完整的输出路径,确保打包后生成正确的相对路径:

base: './',
plugins: [react()],
build: {
  rollupOptions: {
    external: ['Basis_24.2.0.0/js/WZP-React-24.2.0.0.js'],
    output: {
      paths: {
        'Basis_24.2.0.0/js/WZP-React-24.2.0.0.js': './Basis_24.2.0.0/js/WZP-React-24.2.0.0.js'
      },
      format: 'es'
    }
  },
  // 移除自动添加的crossorigin属性(按需选择)
  crossorigin: false
}

2. 恢复defer属性(可选)

如果打包后script标签丢失了defer属性,可以添加一个自定义Vite插件手动补全:

plugins: [
  react(),
  {
    name: 'inject-defer',
    transformIndexHtml(html) {
      return html.replace(
        /<script type="module" src="\.\/Basis_24\.2\.0\.0\/js\/WZP-React-24\.2\.0\.0\.js">/g,
        '<script defer type="module" src="./Basis_24.2.0.0/js/WZP-React-24.2.0.0.js">'
      )
    }
  }
]

原理说明

  • output.paths用于将外部模块的标识映射到打包后实际引入的路径,直接指定你需要的相对路径即可保留完整前缀。
  • crossorigin: false会关闭Vite自动添加的跨域属性,如果你需要该属性可删除此配置。
  • 自定义插件通过transformIndexHtml钩子修改最终生成的index.html内容,补全defer属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:50:23