Svelte加载GeoJSON报Parse failure Unexpected token (1:7)错误
错误原因说明
- 报错
Parse failure: Unexpected token (1:7)是项目构建工具(Svelte项目通常基于Vite/Rollup)抛出的模块解析错误:构建工具默认将.geojson后缀文件当做JavaScript脚本解析,但GeoJSON本质是纯JSON格式文本,内容开头为{"type": "FeatureCollection"...},不符合JavaScript语法规则,解析到第1行第7个字符时因语法不匹配中断。 - 你生成的GeoJSON文件本身格式没有问题,在JSFiddle环境能正常运行,是因为JSFiddle中不存在构建环节对
.geojson文件的模块解析流程:要么是直接将GeoJSON内容赋值给JS变量,要么是通过网络请求拿到已解析完成的JavaScript对象,Mapbox可以直接读取使用,自然不会报错。 - 问题核心是Svelte项目默认没有配置
.geojson格式文件的解析规则,构建工具无法识别该后缀文件应该按JSON格式解析为可直接使用的JS对象,而非当做JS脚本执行。
修复方案
以下三种方案任选其一即可,不需要修改你原有的CSV转GeoJSON的脚本逻辑:
- 方案1(最简便,零配置):将生成的
organizations.geojson文件重命名为organizations.json,同时修改导入语句为import geoData from "$data/organizations.json"。Svelte/Vite内置了.json后缀文件的解析规则,会自动将JSON内容转换为JS对象导入,可直接传给Mapbox使用。 - 方案2(保留.geojson后缀,零配置修改):导入时显式指定解析规则,强制构建工具按JSON格式处理文件,修改导入语句为:
import geoData from "$data/organizations.geojson?json"
- 方案3(运行时异步加载):将GeoJSON文件放到项目的静态资源目录(通常是
static文件夹),不做构建时导入,在地图加载完成后通过请求拉取解析:
map.on('load', async () => { const res = await fetch('/organizations.geojson'); const geoData = await res.json(); map.addSource('earthquakes', { type: 'geojson', data: geoData, cluster: true, clusterMaxZoom: 14, clusterRadius: 50 }); // 后续图层添加逻辑 })
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

