- 需要注意的是改成axios请求后,打包app有获取不到json文件
- 要把json文件放入public,但光放在public,打包编辑后会直接在dist根目录了,和assets默认的静态文件路径不一致,所以在public目录下新加一个assets,这样打包后就会和src下的assets合并
- 然后又发现浏览器调试没问题,但打包后依旧找不到路径,这里一定一定一定注意,apk里要使用相对路径,让它自己关联上下文
以下是项目上的相关代码
//注意因为直接引入json会打字打包的文件过大,所以这里要使用请求的方式
const getMapJson = (key: string) => {
let mode = import.meta.env.MODE
const base = `dataMap/${key}.json`
//根据环境变量,判断是开发环境还是生产环境,生成的路径不一样,app中不需要完整路径,是上下文
let jsonPath = mode === 'development' '/assets/' + base : base
axios
.get(new URL(jsonPath, import.meta.url).href)
.then((res: any) => {
mapJson[key] = res.data
})
.catch(err => {
console.log(err)
})
}
//需要加载的json文件
const files = ['aaa','bbb']//json文件名集合,遍历请求
const mapJson = {}
for (const i in files) {
getMapJson(files[i])
}
这样处理后,体积小一半,且apk也没问题