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

如何在Vite+Svelte项目中动态导入路径含变量的JSON文件

Vite + Svelte 动态导入路径带变量的JSON文件实现方法

Vite 基于ES模块构建,不支持完全动态的导入路径(打包阶段无法静态分析未知路径的依赖),也无法在Svelte的ES模块环境下直接使用CommonJS规范的require语法,正确实现方式是使用Vite内置的import.meta.glob能力:

  • 第一步:提前通过glob规则匹配所有可能被动态导入的JSON文件
    传入eager: true可以在构建时直接加载JSON内容,不需要运行时异步请求;import: 'default'可以直接拿到JSON解析后的对象,不需要额外读取default属性:

    // 请根据你的JSON文件实际存放路径修改glob匹配规则
    // 示例规则表示匹配当前目录下data文件夹内所有层级的.json文件
    const allJsonModules = import.meta.glob('./data/**/*.json', {
      eager: true,
      import: 'default'
    })
    

    注意:glob匹配路径必须以./或../开头的相对路径,不支持写绝对路径和完全动态的路径片段。

  • 第二步:根据动态变量拼接目标文件路径,直接从预匹配的模块集合中取对应内容即可

    // 假设你的动态路径变量是sceneId,实际需要导入的文件路径为./data/${sceneId}.json
    const dynamicPath = `./data/${sceneId}.json`
    const targetJson = allJsonModules[dynamicPath]
    
    // 增加容错判断,避免路径拼接错误导致取值失败
    if (!targetJson) {
      throw new Error(`未找到对应配置文件:${dynamicPath}`)
    }
    

如果你的JSON文件体积较大,不希望首屏就加载所有匹配的JSON,可以去掉eager: true配置,改用异步方式加载目标文件:

const allJsonModules = import.meta.glob('./data/**/*.json', { import: 'default' })

const dynamicPath = `./data/${sceneId}.json`
const loadTargetJson = allJsonModules[dynamicPath]
if (!loadTargetJson) {
  throw new Error(`未找到对应配置文件:${dynamicPath}`)
}
// 异步加载目标JSON
const targetJson = await loadTargetJson()

问题描述截图


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:03:29