所以我对 Web 开发非常陌生,在学习了基础知识后,我想学习一个框架,所以我选择了 vue 并使用 vite 运行它 使用
npm init vue@latest
女巫设置 vue 和 vite 创建了一个项目,它工作得很好,对我来说最大的问题是我需要通过 fetch 访问一些 JSON 文件,但是当我使用 fetch 时,它会返回一些看起来像这样的 HTML 代码
<!DOCTYPE html>
<html lang="en">
<head>
<script type="module" src="/@vite/client"></script>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Website</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js?t=1710967198517"></script>
</body>
</html>
而不是实际的 JSON 文件
我正在运行的代码是
fetch(path/to/my/file.json).then((p) => p.json())
问题是 p 等于上面的 HTML 代码,而不是我要获取的 json 字符串
我不确定为什么会这样,但我认为因为我的网站运行在本地主机服务器上,因为 Web URL 工作正常,它不能只通过简单的路径访问我的本地文件,我的理论是我需要以某种方式将静态文件与 vite 捆绑在一起但找不到有关如何操作的信息
也不要告诉我使用 import 来导入文件,因为这在其他上下文中会有所帮助,但在我中,我使用的库接受路径或 URL 并执行提取,所以我不能只导入 JSON 我必须去拿它
使用 Vite,可以通过三种方式处理捆绑的静态文件 URL...
通常,JSON 文件在构建阶段作为内容导入和处理。要使用
fetch()
中的一个,您需要一个 URL。
import jsonUrl from 'path/to/my/file.json?url'; // 👈 note the ?url suffix
fetch(jsonUrl).((p) => p.json());
将文件放入
public/path/to/my/file.json
并使用绝对 URL
fetch('/path/to/my/file.json').then((p) => p.json());
const jsonUrl = new URL('./relative/path/to/my/file.json', import.meta.url).href;
fetch(jsonUrl).((p) => p.json());